yt-dlp-bridge 0.3.0 → 0.5.0
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 +31 -6
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +2 -2
- package/dist/environment.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -5
- package/dist/errors.js.map +1 -1
- package/dist/extractorArgs.d.ts +22 -0
- package/dist/extractorArgs.d.ts.map +1 -0
- package/dist/extractorArgs.js +115 -0
- package/dist/extractorArgs.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/info.d.ts +166 -0
- package/dist/info.d.ts.map +1 -0
- package/dist/info.js +131 -0
- package/dist/info.js.map +1 -0
- package/dist/output-events.d.ts +3 -0
- package/dist/output-events.d.ts.map +1 -1
- package/dist/output-events.js +15 -2
- package/dist/output-events.js.map +1 -1
- package/dist/parsers.d.ts +1 -2
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +70 -98
- package/dist/parsers.js.map +1 -1
- package/dist/runner.d.ts +27 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +169 -20
- package/dist/runner.js.map +1 -1
- package/dist/schemas.d.ts +5 -12
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -3
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +1 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow.d.ts +5 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +55 -17
- package/dist/workflow.js.map +1 -1
- package/package.json +44 -18
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ Source and contributions live in the Arroxy monorepo at [`packages/yt-dlp-bridge
|
|
|
13
13
|
|
|
14
14
|
- [Install](#install)
|
|
15
15
|
- [Features](#features)
|
|
16
|
+
- [What changed in 0.5.0](#what-changed-in-050)
|
|
17
|
+
- [What changed in 0.4.0](#what-changed-in-040)
|
|
16
18
|
- [What changed in 0.3.0](#what-changed-in-030)
|
|
17
19
|
- [What changed in 0.2.0](#what-changed-in-020)
|
|
18
20
|
- [Usage](#usage)
|
|
@@ -43,10 +45,30 @@ Requires Node.js >= 22.13 and ESM.
|
|
|
43
45
|
- Managed output policy for output roots, temp roots, archive files, overwrite behavior, and parent-directory traversal checks.
|
|
44
46
|
- Secret redaction for auth flags, cookies, PO tokens, visitor data, proxies, signed URLs, and command previews.
|
|
45
47
|
- Parsers for JSON lines, format lists, subtitle lists, thumbnail lists, progress output, final output paths, and live yt-dlp output events.
|
|
46
|
-
- Low-level process runner using `spawn` with `shell: false
|
|
48
|
+
- Low-level process runner using `spawn` with `shell: false`: streams whole output lines (yt-dlp's `\r` progress redraws included), keeps a bounded tail of output, and on timeout or cancel kills the whole process tree, never a reaped pid.
|
|
49
|
+
- A Zod schema for yt-dlp's `info_dict` (`--dump-json` / `--dump-single-json` output).
|
|
47
50
|
- Source-derived option catalog generated from `yt_dlp.options.create_parser`.
|
|
48
51
|
- ESM and TypeScript declarations.
|
|
49
52
|
|
|
53
|
+
## What changed in 0.5.0
|
|
54
|
+
|
|
55
|
+
0.5.0 contains breaking changes and requires `ytdlp-errors` 1.3.0. 0.4.0 was never published; its change is listed under 0.4.0 below and ships in 0.5.0.
|
|
56
|
+
|
|
57
|
+
- **Breaking:** `CONFIG` is gone from `yt-dlp-bridge/config`. The package no longer reads `YTDLP_MCP_*` or the home directory at import: `planWorkflow` and `checkEnvironment` call `loadConfig()` when no `config` is passed, so they see the environment as it is at call time.
|
|
58
|
+
- **Breaking:** `parseProgress`, `ProgressEvent`, `ProgressEventPhaseSchema`/`ProgressEventPhase` and `PROGRESS_EVENT_PHASES` are removed. `parseYtDlpOutputLine` is the one progress parser: its `progress` event now also carries `total`, `speed` and `eta` from a `[download]` line.
|
|
59
|
+
- **Breaking:** `sanitizeMetadataItem` reads its input through the new `infoDictSchema`. A dict the schema rejects (a field of the wrong type, say) now sanitizes to `{}` instead of keeping the fields that happened to be valid. A playlist dict keeps only `id`, `title`, `webpageUrl`, `extractor`, `extractorKey` and `thumbnailCount`.
|
|
60
|
+
- **Breaking:** `SUBTITLE_MODES` is now ordered `sidecar`, `embed`, `subfolder`.
|
|
61
|
+
- New `yt-dlp-bridge/info` subpath: `infoDictSchema`, `ytDlpFormatSchema`, `ytDlpSubtitleTrackSchema`, the `InfoDict` / `VideoInfo` / `PlaylistInfo` / `MultiVideoInfo` / `UrlRedirectInfo` / `YtDlpFormat` / `YtDlpSubtitleTrack` types, and `isPlaylistLike` / `isUrlRedirect`.
|
|
62
|
+
- `runCommand` spawns the child as its own process group on Unix and kills the whole tree on timeout or cancel (`taskkill /T /F` on Windows), so an ffmpeg that yt-dlp forked no longer survives. It never signals a child that has already exited. New options: `onStdoutLine` / `onStderrLine` stream each whole, trimmed line as it arrives (if one throws, the child is killed and the run rejects with that error), and `logger` receives the warnings the runner absorbs. Output capture no longer copies the whole buffer on every chunk.
|
|
63
|
+
- New runner exports: `killProcessTree`, `splitOutputLines`, `createStreamTextReader`, `SPAWN_AS_PROCESS_GROUP`, and the `RunnerLogger`, `KillableProcess`, `StreamTextReader`, `StreamTextChunk` types.
|
|
64
|
+
- `toStructuredError` takes `unsupportedUrl` from the `ytdlp-errors` classifier instead of a regex of its own. A line such as `... is not a valid URL` still classifies; text that merely mentions an unsupported URL no longer does.
|
|
65
|
+
- `CallerMediaWorkflowInput` gains `downloadSections` (yt-dlp `--download-sections` values such as `*220-435`) and `forceKeyframesAtCuts`. A plan with sections lists ffmpeg as required and reports the cut as a side effect; an exact cut also reports the re-encode as a risk.
|
|
66
|
+
- `embed.chapters: false` now passes `--no-embed-chapters` (unless SponsorBlock marks segments as chapters). yt-dlp otherwise embeds chapters whenever `--add-metadata` is on.
|
|
67
|
+
|
|
68
|
+
## What changed in 0.4.0
|
|
69
|
+
|
|
70
|
+
- Requires `ytdlp-errors` 1.2.0. `toStructuredError` can now return `kind: 'outputNotWritable'` when the output folder refuses writes (permission denied, read-only drive, or a privacy-protected folder), with a suggested fix to grant write access or choose another output root.
|
|
71
|
+
|
|
50
72
|
## What changed in 0.3.0
|
|
51
73
|
|
|
52
74
|
- `parseYtDlpOutputLine` emits two new event kinds: `artifact` (a written description, info JSON, or thumbnail sidecar, with its `path`) and `transfer-retry` (yt-dlp's in-process `Got error: ... Retrying (n/m)` line, with `attempt` and `total`). `postprocess` events now carry the output `path` when yt-dlp prints one. Exhaustive `switch` statements over `YtDlpOutputEvent` need the two new cases.
|
|
@@ -216,10 +238,11 @@ if (event?.kind === "merge") {
|
|
|
216
238
|
|
|
217
239
|
### Run a planned command
|
|
218
240
|
|
|
219
|
-
The bridge runner is low-level. It executes a command path plus argv; it does not resolve binaries or decide retries.
|
|
241
|
+
The bridge runner is low-level. It executes a command path plus argv; it does not resolve binaries or decide retries. The child runs as its own process group on Unix, so it does not receive the terminal's Ctrl+C: stop it with `signal`.
|
|
220
242
|
|
|
221
243
|
```ts
|
|
222
244
|
import { planWorkflow } from "yt-dlp-bridge";
|
|
245
|
+
import { parseYtDlpOutputLine } from "yt-dlp-bridge/parsers";
|
|
223
246
|
import { runCommand } from "yt-dlp-bridge/runner";
|
|
224
247
|
import { toStructuredError } from "yt-dlp-bridge/errors";
|
|
225
248
|
|
|
@@ -231,7 +254,8 @@ const plan = planWorkflow({
|
|
|
231
254
|
try {
|
|
232
255
|
const result = await runCommand("yt-dlp", plan.args, {
|
|
233
256
|
timeoutMs: 900_000,
|
|
234
|
-
maxOutputBytes: 4 * 1024 * 1024
|
|
257
|
+
maxOutputBytes: 4 * 1024 * 1024,
|
|
258
|
+
onStderrLine: line => console.log(parseYtDlpOutputLine(line))
|
|
235
259
|
});
|
|
236
260
|
console.log(result.stdout);
|
|
237
261
|
} catch (error) {
|
|
@@ -260,12 +284,13 @@ Prefer the root export for workflow planning and subpaths for lower-level utilit
|
|
|
260
284
|
| --- | --- |
|
|
261
285
|
| Workflow planning | `planWorkflow`, workflow input/plan/fact types |
|
|
262
286
|
| Schemas | `WorkflowInspectInputSchema`, `WorkflowDownloadInputSchema`, `WorkflowExecutionInputSchema`, `WorkflowPostprocessInputSchema`, `WorkflowExpertInputSchema`, `WorkflowInputSchema`, `ValidateWorkflowInputSchema` |
|
|
263
|
-
| Config | `loadConfig
|
|
287
|
+
| Config | `loadConfig` from `yt-dlp-bridge/config` |
|
|
264
288
|
| Environment | `checkEnvironment` from `yt-dlp-bridge/environment` |
|
|
265
289
|
| Filesystem policy | `resolveOutputPolicy`, `resolveManagedPath`, `ensureWithinRoot`, `isPathInside`, `isPathInsideWith`, `hasParentTraversal`, `ensureDirectory`, `readArchive` from `yt-dlp-bridge/filesystem` |
|
|
266
290
|
| Option catalog | `UPSTREAM_OPTION_CATALOG`, `listLongFlags`, `findOptionByFlag`, `optionMetadata` from `yt-dlp-bridge/option-catalog` |
|
|
267
|
-
|
|
|
268
|
-
|
|
|
291
|
+
| info_dict | `infoDictSchema`, `ytDlpFormatSchema`, `ytDlpSubtitleTrackSchema`, `isPlaylistLike`, `isUrlRedirect` and the `InfoDict` family of types from `yt-dlp-bridge/info` |
|
|
292
|
+
| Parsers | `parseYtDlpOutputLine`, `parseJsonLines`, `sanitizeMetadataItem`, `sanitizeMetadataItems`, `paginate`, `parseFormats`, `parseSubtitles`, `parseThumbnails`, `parseFinalPaths` from `yt-dlp-bridge/parsers` |
|
|
293
|
+
| Runner | `runCommand`, `CommandExecutionError`, `killProcessTree`, `splitOutputLines`, `createStreamTextReader`, `SPAWN_AS_PROCESS_GROUP` from `yt-dlp-bridge/runner` |
|
|
269
294
|
| Redaction | `redactArgs`, `redactText`, `excerpt` from `yt-dlp-bridge/redaction` |
|
|
270
295
|
| Structured errors | `toStructuredError` from `yt-dlp-bridge/errors` |
|
|
271
296
|
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB,EAAE,OAAO,CAAA;IAClC,gBAAgB,EAAE,OAAO,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,EAAE,OAAO,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB;AA2BD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAoB7E
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB,EAAE,OAAO,CAAA;IAClC,gBAAgB,EAAE,OAAO,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,EAAE,OAAO,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB;AA2BD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAoB7E"}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,YAAY,EAAC,MAAM,aAAa,CAAA;AAEzD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAA;IACzC,YAAY,EAAE,kBAAkB,EAAE,CAAA;IAClC,OAAO,EAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC,CAAA;IACtG,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,yBAAyB,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAC,CAAA;CAClK;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,YAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBtG"}
|
package/dist/environment.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import os from 'node:os';
|
|
3
|
-
import {
|
|
3
|
+
import { loadConfig } from './config.js';
|
|
4
4
|
import { runCommand } from './runner.js';
|
|
5
|
-
export async function checkEnvironment(config =
|
|
5
|
+
export async function checkEnvironment(config = loadConfig()) {
|
|
6
6
|
const dependencies = await Promise.all([
|
|
7
7
|
detectBinary('yt-dlp', config.ytdlpPath, ['--version'], ['all yt-dlp operations'], true, config),
|
|
8
8
|
detectBinary('ffmpeg', config.ffmpegPath ?? 'ffmpeg', ['-version'], ['merge', 'remux', 'recode', 'extract audio', 'embed assets'], false, config),
|
package/dist/environment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,YAAY,CAAA;AAE/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,YAAY,CAAA;AAE/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAgBjE"}
|
package/dist/errors.js
CHANGED
|
@@ -4,8 +4,7 @@ import { CommandExecutionError } from './runner.js';
|
|
|
4
4
|
export function toStructuredError(error) {
|
|
5
5
|
if (error instanceof CommandExecutionError) {
|
|
6
6
|
const stderr = [error.result.stderr, error.result.stdout, error.message].find(value => value.length > 0) ?? error.message;
|
|
7
|
-
const
|
|
8
|
-
const kind = inferUnsupportedUrl(stderr) ? 'unsupportedUrl' : classified.kind;
|
|
7
|
+
const { kind } = classifyYtDlpStderr(stderr);
|
|
9
8
|
const metadata = errorKindMetadata(kind);
|
|
10
9
|
const structured = { kind, message: extractLastError(stderr) ?? error.message, retryable: metadata.recoverable, exitCode: error.result.exitCode, stderrExcerpt: excerpt(stderr), suggestedFixes: suggestedFixes(kind, metadata.suggestedFlags) };
|
|
11
10
|
const dependency = inferDependency(stderr);
|
|
@@ -33,9 +32,6 @@ function inferDependency(text) {
|
|
|
33
32
|
return 'js-runtime';
|
|
34
33
|
return undefined;
|
|
35
34
|
}
|
|
36
|
-
function inferUnsupportedUrl(text) {
|
|
37
|
-
return /unsupported url|no suitable extractor|not a valid URL/i.test(text);
|
|
38
|
-
}
|
|
39
35
|
function suggestedFixes(kind, flags) {
|
|
40
36
|
const fixes = new Set();
|
|
41
37
|
for (const flag of flags ?? [])
|
|
@@ -50,6 +46,8 @@ function suggestedFixes(kind, flags) {
|
|
|
50
46
|
fixes.add('Use an allowed region, proxy, or yt-dlp geo-bypass option where legal.');
|
|
51
47
|
if (kind === 'outOfDiskSpace')
|
|
52
48
|
fixes.add('Free disk space or choose a different output root.');
|
|
49
|
+
if (kind === 'outputNotWritable')
|
|
50
|
+
fixes.add('Grant write access to the output root or choose a different one.');
|
|
53
51
|
return [...fixes];
|
|
54
52
|
}
|
|
55
53
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,cAAc,CAAA;AACrF,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAA;AAGjD,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAA;QACzH,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** One extractor's arguments: each key's values, as `_configuration_arg` reads them. */
|
|
2
|
+
export type ExtractorArgValues = Readonly<Record<string, readonly string[]>>;
|
|
3
|
+
/** Extractor arguments by lower-cased extractor name (`youtube`, `youtubetab`, …). */
|
|
4
|
+
export type ExtractorArgs = Readonly<Record<string, ExtractorArgValues>>;
|
|
5
|
+
/** Parses one `--extractor-args` value (`IE:key=v1,v2;key2=v`) with yt-dlp's rules. */
|
|
6
|
+
export declare function parseExtractorArgsBlock(value: string): ExtractorArgs;
|
|
7
|
+
/** Renders one extractor's arguments as a single `--extractor-args` value. */
|
|
8
|
+
export declare function renderExtractorArgsBlock(extractor: string, values: ExtractorArgValues): string;
|
|
9
|
+
/** Merges extractor arguments key by key; a later layer's key replaces an earlier one's. */
|
|
10
|
+
export declare function mergeExtractorArgs(...layers: readonly ExtractorArgs[]): ExtractorArgs;
|
|
11
|
+
/** The extractor arguments yt-dlp would act on for this argv: the last block per extractor wins whole. */
|
|
12
|
+
export declare function effectiveExtractorArgs(argv: readonly string[]): ExtractorArgs;
|
|
13
|
+
/** Extractors that this argv names in more than one block, where all but the last are silently lost. */
|
|
14
|
+
export declare function duplicateExtractorArgsBlocks(argv: readonly string[]): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Folds every extractor-args block in `argv`, then `overrides`, into one block
|
|
17
|
+
* per extractor, merged key by key, so everything a caller meant to pass
|
|
18
|
+
* reaches yt-dlp. The blocks take the place of the first one in the argv, or
|
|
19
|
+
* lead it when it had none.
|
|
20
|
+
*/
|
|
21
|
+
export declare function withExtractorArgs(argv: readonly string[], overrides: ExtractorArgs): string[];
|
|
22
|
+
//# sourceMappingURL=extractorArgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractorArgs.d.ts","sourceRoot":"","sources":["../src/extractorArgs.ts"],"names":[],"mappings":"AAMA,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;AAE5E,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAUxE,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAcpE;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAa9F;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,GAAG,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,aAAa,CAQrF;AA4BD,0GAA0G;AAC1G,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAI7E;AAED,wGAAwG;AACxG,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAU9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,GAAG,MAAM,EAAE,CAS7F"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// yt-dlp keeps one argument dict per extractor and *replaces* it when the same
|
|
2
|
+
// extractor is given again: `--extractor-args youtube:a=1 --extractor-args
|
|
3
|
+
// youtube:b=2` leaves only `b` (options.py `_dict_from_options_callback`,
|
|
4
|
+
// append=False). Callers that add their own options to a planned argv must
|
|
5
|
+
// therefore merge into the extractor's single block, never append another.
|
|
6
|
+
const EXTRACTOR_ARGS_FLAG = '--extractor-args';
|
|
7
|
+
const EXTRACTOR_NAME = /^([\w-]+):(.*)$/s;
|
|
8
|
+
const KEY = /^[\w-]+$/;
|
|
9
|
+
function normalizeKey(key) {
|
|
10
|
+
return key.trim().toLowerCase().replace(/-/g, '_');
|
|
11
|
+
}
|
|
12
|
+
/** Parses one `--extractor-args` value (`IE:key=v1,v2;key2=v`) with yt-dlp's rules. */
|
|
13
|
+
export function parseExtractorArgsBlock(value) {
|
|
14
|
+
const match = EXTRACTOR_NAME.exec(value);
|
|
15
|
+
const extractor = match?.[1];
|
|
16
|
+
const body = match?.[2];
|
|
17
|
+
if (extractor === undefined || body === undefined)
|
|
18
|
+
throw new Error(`--extractor-args value must start with an extractor name: ${value}`);
|
|
19
|
+
const values = {};
|
|
20
|
+
for (const part of body.split(';')) {
|
|
21
|
+
const separator = part.indexOf('=');
|
|
22
|
+
const key = normalizeKey(separator === -1 ? part : part.slice(0, separator));
|
|
23
|
+
if (key === '')
|
|
24
|
+
continue;
|
|
25
|
+
const raw = separator === -1 ? '' : part.slice(separator + 1);
|
|
26
|
+
values[key] = raw.split(/(?<!\\),/).map(item => item.replace(/\\,/g, ',').trim());
|
|
27
|
+
}
|
|
28
|
+
return { [extractor.toLowerCase()]: values };
|
|
29
|
+
}
|
|
30
|
+
/** Renders one extractor's arguments as a single `--extractor-args` value. */
|
|
31
|
+
export function renderExtractorArgsBlock(extractor, values) {
|
|
32
|
+
if (!KEY.test(extractor))
|
|
33
|
+
throw new Error(`Invalid extractor name for --extractor-args: ${extractor}`);
|
|
34
|
+
const parts = [];
|
|
35
|
+
for (const [key, list] of Object.entries(values)) {
|
|
36
|
+
if (!KEY.test(key))
|
|
37
|
+
throw new Error(`Invalid --extractor-args key: ${key}`);
|
|
38
|
+
if (list.length === 0)
|
|
39
|
+
continue;
|
|
40
|
+
for (const item of list) {
|
|
41
|
+
// yt-dlp splits keys on ';' with no escape, so such a value cannot be passed at all.
|
|
42
|
+
if (item.includes(';'))
|
|
43
|
+
throw new Error(`--extractor-args value for ${extractor}:${key} cannot contain ';'`);
|
|
44
|
+
}
|
|
45
|
+
parts.push(`${key}=${list.map(item => item.replace(/,/g, '\\,')).join(',')}`);
|
|
46
|
+
}
|
|
47
|
+
return `${extractor.toLowerCase()}:${parts.join(';')}`;
|
|
48
|
+
}
|
|
49
|
+
/** Merges extractor arguments key by key; a later layer's key replaces an earlier one's. */
|
|
50
|
+
export function mergeExtractorArgs(...layers) {
|
|
51
|
+
const merged = {};
|
|
52
|
+
for (const layer of layers) {
|
|
53
|
+
for (const [extractor, values] of Object.entries(layer)) {
|
|
54
|
+
merged[extractor] = { ...merged[extractor], ...values };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return merged;
|
|
58
|
+
}
|
|
59
|
+
function occurrences(argv) {
|
|
60
|
+
const found = [];
|
|
61
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
62
|
+
const arg = argv[index] ?? '';
|
|
63
|
+
const next = argv[index + 1];
|
|
64
|
+
if (arg === EXTRACTOR_ARGS_FLAG && next !== undefined) {
|
|
65
|
+
found.push({ index, width: 2, value: next });
|
|
66
|
+
index += 1;
|
|
67
|
+
}
|
|
68
|
+
else if (arg.startsWith(`${EXTRACTOR_ARGS_FLAG}=`)) {
|
|
69
|
+
found.push({ index, width: 1, value: arg.slice(EXTRACTOR_ARGS_FLAG.length + 1) });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return found;
|
|
73
|
+
}
|
|
74
|
+
// The blocks yt-dlp would accept; one it rejects (no extractor name) carries nothing.
|
|
75
|
+
function acceptedBlocks(argv) {
|
|
76
|
+
return occurrences(argv).flatMap(({ value }) => (EXTRACTOR_NAME.test(value) ? [parseExtractorArgsBlock(value)] : []));
|
|
77
|
+
}
|
|
78
|
+
/** The extractor arguments yt-dlp would act on for this argv: the last block per extractor wins whole. */
|
|
79
|
+
export function effectiveExtractorArgs(argv) {
|
|
80
|
+
const effective = {};
|
|
81
|
+
for (const block of acceptedBlocks(argv))
|
|
82
|
+
Object.assign(effective, block);
|
|
83
|
+
return effective;
|
|
84
|
+
}
|
|
85
|
+
/** Extractors that this argv names in more than one block, where all but the last are silently lost. */
|
|
86
|
+
export function duplicateExtractorArgsBlocks(argv) {
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
const duplicates = new Set();
|
|
89
|
+
for (const block of acceptedBlocks(argv)) {
|
|
90
|
+
for (const extractor of Object.keys(block)) {
|
|
91
|
+
if (seen.has(extractor))
|
|
92
|
+
duplicates.add(extractor);
|
|
93
|
+
seen.add(extractor);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return [...duplicates];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Folds every extractor-args block in `argv`, then `overrides`, into one block
|
|
100
|
+
* per extractor, merged key by key, so everything a caller meant to pass
|
|
101
|
+
* reaches yt-dlp. The blocks take the place of the first one in the argv, or
|
|
102
|
+
* lead it when it had none.
|
|
103
|
+
*/
|
|
104
|
+
export function withExtractorArgs(argv, overrides) {
|
|
105
|
+
const found = occurrences(argv);
|
|
106
|
+
if (found.length === 0 && Object.keys(overrides).length === 0)
|
|
107
|
+
return [...argv];
|
|
108
|
+
const merged = mergeExtractorArgs(...found.map(({ value }) => parseExtractorArgsBlock(value)), overrides);
|
|
109
|
+
const rendered = Object.entries(merged).flatMap(([extractor, values]) => [EXTRACTOR_ARGS_FLAG, renderExtractorArgsBlock(extractor, values)]);
|
|
110
|
+
const skipped = new Set(found.flatMap(({ index, width }) => (width === 2 ? [index, index + 1] : [index])));
|
|
111
|
+
const rest = argv.filter((_, index) => !skipped.has(index));
|
|
112
|
+
const at = found[0]?.index ?? 0;
|
|
113
|
+
return [...rest.slice(0, at), ...rendered, ...rest.slice(at)];
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=extractorArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractorArgs.js","sourceRoot":"","sources":["../src/extractorArgs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA"}
|
package/dist/info.d.ts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ytDlpFormatSchema: z.ZodObject<{
|
|
3
|
+
format_id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
4
|
+
ext: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
5
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
6
|
+
resolution: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
7
|
+
format_note: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
8
|
+
width: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
9
|
+
height: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
10
|
+
fps: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
11
|
+
tbr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
12
|
+
vbr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
13
|
+
abr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
14
|
+
asr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
15
|
+
audio_channels: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
16
|
+
filesize: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
17
|
+
filesize_approx: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
18
|
+
vcodec: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
19
|
+
acodec: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
20
|
+
dynamic_range: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
21
|
+
protocol: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
22
|
+
language: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
23
|
+
language_preference: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
24
|
+
preference: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
25
|
+
quality: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
26
|
+
http_headers: z.ZodPreprocess<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>, unknown>;
|
|
27
|
+
}, z.core.$loose>;
|
|
28
|
+
export type YtDlpFormat = z.infer<typeof ytDlpFormatSchema>;
|
|
29
|
+
export declare const ytDlpSubtitleTrackSchema: z.ZodObject<{
|
|
30
|
+
ext: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
31
|
+
name: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
32
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
33
|
+
data: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
34
|
+
}, z.core.$loose>;
|
|
35
|
+
export type YtDlpSubtitleTrack = z.infer<typeof ytDlpSubtitleTrackSchema>;
|
|
36
|
+
declare const videoFieldsSchema: z.ZodObject<{
|
|
37
|
+
id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
38
|
+
title: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
39
|
+
fulltitle: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
40
|
+
description: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
41
|
+
thumbnail: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
42
|
+
thumbnails: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
43
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
44
|
+
width: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
45
|
+
height: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
46
|
+
id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
47
|
+
}, z.core.$loose>>>, unknown>;
|
|
48
|
+
duration: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
49
|
+
duration_string: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
50
|
+
webpage_url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
51
|
+
extractor: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
52
|
+
extractor_key: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
53
|
+
formats: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
54
|
+
format_id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
55
|
+
ext: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
56
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
57
|
+
resolution: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
58
|
+
format_note: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
59
|
+
width: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
60
|
+
height: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
61
|
+
fps: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
62
|
+
tbr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
63
|
+
vbr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
64
|
+
abr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
65
|
+
asr: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
66
|
+
audio_channels: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
67
|
+
filesize: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
68
|
+
filesize_approx: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
69
|
+
vcodec: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
70
|
+
acodec: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
71
|
+
dynamic_range: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
72
|
+
protocol: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
73
|
+
language: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
74
|
+
language_preference: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
75
|
+
preference: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
76
|
+
quality: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
77
|
+
http_headers: z.ZodPreprocess<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>, unknown>;
|
|
78
|
+
}, z.core.$loose>>>, unknown>;
|
|
79
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
80
|
+
subtitles: z.ZodPreprocess<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
|
|
81
|
+
ext: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
82
|
+
name: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
83
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
84
|
+
data: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
85
|
+
}, z.core.$loose>>>>, unknown>;
|
|
86
|
+
automatic_captions: z.ZodPreprocess<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
|
|
87
|
+
ext: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
88
|
+
name: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
89
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
90
|
+
data: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
91
|
+
}, z.core.$loose>>>>, unknown>;
|
|
92
|
+
is_live: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
|
|
93
|
+
was_live: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
|
|
94
|
+
live_status: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
95
|
+
availability: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
96
|
+
has_drm: z.ZodPreprocess<z.ZodOptional<z.ZodBoolean>, unknown>;
|
|
97
|
+
age_limit: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
98
|
+
uploader: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
99
|
+
channel: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
100
|
+
creator: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
101
|
+
uploader_id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
102
|
+
channel_id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
103
|
+
channel_url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
104
|
+
upload_date: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
105
|
+
categories: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>, unknown>;
|
|
106
|
+
tags: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodString>>, unknown>;
|
|
107
|
+
chapters: z.ZodCatch<z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodUnknown>>, unknown>>;
|
|
108
|
+
timestamp: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
109
|
+
}, z.core.$strip>;
|
|
110
|
+
declare const playlistFieldsSchema: z.ZodObject<{
|
|
111
|
+
id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
112
|
+
title: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
113
|
+
thumbnail: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
114
|
+
thumbnails: z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
115
|
+
url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
116
|
+
width: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
117
|
+
height: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
118
|
+
id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
119
|
+
}, z.core.$loose>>>, unknown>;
|
|
120
|
+
webpage_url: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
121
|
+
extractor: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
122
|
+
extractor_key: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
123
|
+
playlist_id: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
124
|
+
playlist_title: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
|
|
125
|
+
playlist_count: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
|
|
126
|
+
}, z.core.$strip>;
|
|
127
|
+
export type InfoDict = ({
|
|
128
|
+
_type?: 'video';
|
|
129
|
+
} & z.infer<typeof videoFieldsSchema>) | ({
|
|
130
|
+
_type: 'playlist';
|
|
131
|
+
} & z.infer<typeof playlistFieldsSchema> & {
|
|
132
|
+
entries: InfoDict[];
|
|
133
|
+
}) | ({
|
|
134
|
+
_type: 'multi_video';
|
|
135
|
+
} & z.infer<typeof playlistFieldsSchema> & {
|
|
136
|
+
entries: InfoDict[];
|
|
137
|
+
}) | ({
|
|
138
|
+
_type: 'url';
|
|
139
|
+
} & z.infer<typeof videoFieldsSchema> & {
|
|
140
|
+
url: string;
|
|
141
|
+
ie_key?: string | undefined;
|
|
142
|
+
}) | ({
|
|
143
|
+
_type: 'url_transparent';
|
|
144
|
+
} & z.infer<typeof videoFieldsSchema> & {
|
|
145
|
+
url: string;
|
|
146
|
+
ie_key?: string | undefined;
|
|
147
|
+
});
|
|
148
|
+
export declare const infoDictSchema: z.ZodType<InfoDict>;
|
|
149
|
+
export type VideoInfo = Extract<InfoDict, {
|
|
150
|
+
_type?: 'video';
|
|
151
|
+
} & {
|
|
152
|
+
formats?: unknown;
|
|
153
|
+
}>;
|
|
154
|
+
export type PlaylistInfo = Extract<InfoDict, {
|
|
155
|
+
_type: 'playlist';
|
|
156
|
+
}>;
|
|
157
|
+
export type MultiVideoInfo = Extract<InfoDict, {
|
|
158
|
+
_type: 'multi_video';
|
|
159
|
+
}>;
|
|
160
|
+
export type UrlRedirectInfo = Extract<InfoDict, {
|
|
161
|
+
_type: 'url' | 'url_transparent';
|
|
162
|
+
}>;
|
|
163
|
+
export declare function isPlaylistLike(info: InfoDict): info is PlaylistInfo | MultiVideoInfo;
|
|
164
|
+
export declare function isUrlRedirect(info: InfoDict): info is UrlRedirectInfo;
|
|
165
|
+
export {};
|
|
166
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../src/info.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AAYrB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BrB,CAAA;AAET,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,wBAAwB;;;;;iBAA2E,CAAA;AAEhH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAwBzE,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4CrB,CAAA;AAEF,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;iBAAiR,CAAA;AAI3S,MAAM,MAAM,QAAQ,GACjB,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,GACvD,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAAG;IAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;CAAC,CAAC,GACpF,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAAG;IAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;CAAC,CAAC,GACvF,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAAC,GACjG,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAAC,CAAA;AAEhH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAY7C,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GAAG;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC,CAAA;AAClF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAC,KAAK,EAAE,UAAU,CAAA;CAAC,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAC,KAAK,EAAE,aAAa,CAAA;CAAC,CAAC,CAAA;AACtE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAAA;CAAC,CAAC,CAAA;AAEnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,IAAI,YAAY,GAAG,cAAc,CAEpF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,IAAI,eAAe,CAErE"}
|