ytgrab 0.1.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.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +142 -0
  3. package/bin/ytgrab.js +194 -0
  4. package/dist/downloader/common.d.ts +22 -0
  5. package/dist/downloader/common.d.ts.map +1 -0
  6. package/dist/downloader/common.js +125 -0
  7. package/dist/downloader/common.js.map +1 -0
  8. package/dist/downloader/hls.d.ts +11 -0
  9. package/dist/downloader/hls.d.ts.map +1 -0
  10. package/dist/downloader/hls.js +134 -0
  11. package/dist/downloader/hls.js.map +1 -0
  12. package/dist/downloader/http.d.ts +10 -0
  13. package/dist/downloader/http.d.ts.map +1 -0
  14. package/dist/downloader/http.js +132 -0
  15. package/dist/downloader/http.js.map +1 -0
  16. package/dist/downloader/index.d.ts +10 -0
  17. package/dist/downloader/index.d.ts.map +1 -0
  18. package/dist/downloader/index.js +24 -0
  19. package/dist/downloader/index.js.map +1 -0
  20. package/dist/extractor/common.d.ts +48 -0
  21. package/dist/extractor/common.d.ts.map +1 -0
  22. package/dist/extractor/common.js +324 -0
  23. package/dist/extractor/common.js.map +1 -0
  24. package/dist/extractor/nsig.d.ts +17 -0
  25. package/dist/extractor/nsig.d.ts.map +1 -0
  26. package/dist/extractor/nsig.js +200 -0
  27. package/dist/extractor/nsig.js.map +1 -0
  28. package/dist/extractor/youtube.d.ts +51 -0
  29. package/dist/extractor/youtube.d.ts.map +1 -0
  30. package/dist/extractor/youtube.js +1113 -0
  31. package/dist/extractor/youtube.js.map +1 -0
  32. package/dist/index.d.ts +36 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +72 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/networking/index.d.ts +33 -0
  37. package/dist/networking/index.d.ts.map +1 -0
  38. package/dist/networking/index.js +171 -0
  39. package/dist/networking/index.js.map +1 -0
  40. package/dist/postprocessor/common.d.ts +21 -0
  41. package/dist/postprocessor/common.d.ts.map +1 -0
  42. package/dist/postprocessor/common.js +42 -0
  43. package/dist/postprocessor/common.js.map +1 -0
  44. package/dist/postprocessor/ffmpeg.d.ts +44 -0
  45. package/dist/postprocessor/ffmpeg.d.ts.map +1 -0
  46. package/dist/postprocessor/ffmpeg.js +286 -0
  47. package/dist/postprocessor/ffmpeg.js.map +1 -0
  48. package/dist/types.d.ts +157 -0
  49. package/dist/types.d.ts.map +1 -0
  50. package/dist/types.js +3 -0
  51. package/dist/types.js.map +1 -0
  52. package/dist/utils/index.d.ts +57 -0
  53. package/dist/utils/index.d.ts.map +1 -0
  54. package/dist/utils/index.js +403 -0
  55. package/dist/utils/index.js.map +1 -0
  56. package/dist/utils/traversal.d.ts +22 -0
  57. package/dist/utils/traversal.d.ts.map +1 -0
  58. package/dist/utils/traversal.js +112 -0
  59. package/dist/utils/traversal.js.map +1 -0
  60. package/dist/ytgrab.d.ts +48 -0
  61. package/dist/ytgrab.d.ts.map +1 -0
  62. package/dist/ytgrab.js +450 -0
  63. package/dist/ytgrab.js.map +1 -0
  64. package/package.json +45 -0
@@ -0,0 +1,403 @@
1
+ "use strict";
2
+ /**
3
+ * Core utility functions ported from yt_dlp/utils/_utils.py
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RegexNotFoundError = exports.UnsupportedError = exports.GeoRestrictedError = exports.DownloadError = exports.ExtractorError = exports.tryGet = exports.traverseObj = void 0;
7
+ exports.intOrNone = intOrNone;
8
+ exports.floatOrNone = floatOrNone;
9
+ exports.strOrNone = strOrNone;
10
+ exports.urlOrNone = urlOrNone;
11
+ exports.boolOrNone = boolOrNone;
12
+ exports.unescapeHTML = unescapeHTML;
13
+ exports.cleanHTML = cleanHTML;
14
+ exports.stripOrNone = stripOrNone;
15
+ exports.sanitizeFilename = sanitizeFilename;
16
+ exports.determineExt = determineExt;
17
+ exports.parseDuration = parseDuration;
18
+ exports.unifiedStrdate = unifiedStrdate;
19
+ exports.unifiedTimestamp = unifiedTimestamp;
20
+ exports.formatBytes = formatBytes;
21
+ exports.parseFilesize = parseFilesize;
22
+ exports.mimetypeToExt = mimetypeToExt;
23
+ exports.jsToJson = jsToJson;
24
+ exports.stripJsonp = stripJsonp;
25
+ exports.getElementByID = getElementByID;
26
+ exports.getElementByClass = getElementByClass;
27
+ exports.extractAttributes = extractAttributes;
28
+ exports.parseCodecs = parseCodecs;
29
+ exports.variadic = variadic;
30
+ exports.filterDict = filterDict;
31
+ exports.mergeDicts = mergeDicts;
32
+ exports.qualities = qualities;
33
+ exports.escapeRegex = escapeRegex;
34
+ exports.orderedSet = orderedSet;
35
+ exports.formatField = formatField;
36
+ exports.removeStart = removeStart;
37
+ exports.removeEnd = removeEnd;
38
+ exports.sleep = sleep;
39
+ var traversal_js_1 = require("./traversal.js");
40
+ Object.defineProperty(exports, "traverseObj", { enumerable: true, get: function () { return traversal_js_1.traverseObj; } });
41
+ Object.defineProperty(exports, "tryGet", { enumerable: true, get: function () { return traversal_js_1.tryGet; } });
42
+ // --- Type coercion helpers ---
43
+ function intOrNone(v, scale = 1, defaultVal = null) {
44
+ if (v === null || v === undefined || v === '')
45
+ return defaultVal;
46
+ try {
47
+ const num = typeof v === 'number' ? v : parseInt(String(v), 10);
48
+ if (isNaN(num))
49
+ return defaultVal;
50
+ return Math.round(num / scale);
51
+ }
52
+ catch {
53
+ return defaultVal;
54
+ }
55
+ }
56
+ function floatOrNone(v, scale = 1, defaultVal = null) {
57
+ if (v === null || v === undefined || v === '')
58
+ return defaultVal;
59
+ try {
60
+ const num = typeof v === 'number' ? v : parseFloat(String(v));
61
+ if (isNaN(num))
62
+ return defaultVal;
63
+ return num / scale;
64
+ }
65
+ catch {
66
+ return defaultVal;
67
+ }
68
+ }
69
+ function strOrNone(v) {
70
+ if (v === null || v === undefined)
71
+ return null;
72
+ const s = String(v);
73
+ return s || null;
74
+ }
75
+ function urlOrNone(url) {
76
+ if (typeof url !== 'string')
77
+ return null;
78
+ const trimmed = url.trim();
79
+ if (!trimmed || trimmed.startsWith('//')) {
80
+ return trimmed.startsWith('//') ? `https:${trimmed}` : null;
81
+ }
82
+ if (/^https?:\/\//.test(trimmed))
83
+ return trimmed;
84
+ return null;
85
+ }
86
+ function boolOrNone(v) {
87
+ if (typeof v === 'boolean')
88
+ return v;
89
+ return null;
90
+ }
91
+ // --- String helpers ---
92
+ function unescapeHTML(s) {
93
+ if (!s)
94
+ return '';
95
+ return s
96
+ .replace(/&/g, '&')
97
+ .replace(/&lt;/g, '<')
98
+ .replace(/&gt;/g, '>')
99
+ .replace(/&quot;/g, '"')
100
+ .replace(/&#39;/g, "'")
101
+ .replace(/&apos;/g, "'")
102
+ .replace(/&#(\d+);/g, (_, n) => String.fromCharCode(parseInt(n, 10)))
103
+ .replace(/&#x([0-9a-fA-F]+);/g, (_, n) => String.fromCharCode(parseInt(n, 16)));
104
+ }
105
+ function cleanHTML(html) {
106
+ if (!html)
107
+ return '';
108
+ let text = html
109
+ .replace(/<\s*br\s*\/?>/gi, '\n')
110
+ .replace(/<\s*\/p\s*>/gi, '\n')
111
+ .replace(/<[^>]+>/g, '')
112
+ .trim();
113
+ return unescapeHTML(text);
114
+ }
115
+ function stripOrNone(v) {
116
+ if (typeof v !== 'string')
117
+ return null;
118
+ const stripped = v.trim();
119
+ return stripped || null;
120
+ }
121
+ // --- Filename helpers ---
122
+ const FILENAME_UNSAFE_RE = /[<>:"/\\|?*\x00-\x1f]/g;
123
+ const FILENAME_RESTRICTED_RE = /[^\w.\-]/g;
124
+ function sanitizeFilename(s, restricted = false) {
125
+ let result = s.replace(FILENAME_UNSAFE_RE, '_');
126
+ if (restricted) {
127
+ result = result.replace(FILENAME_RESTRICTED_RE, '_');
128
+ }
129
+ // Remove leading/trailing dots and spaces
130
+ result = result.replace(/^[\s.]+|[\s.]+$/g, '');
131
+ // Collapse multiple underscores
132
+ result = result.replace(/_+/g, '_');
133
+ return result || '_';
134
+ }
135
+ function determineExt(url, defaultExt = 'unknown_video') {
136
+ const parsed = url.split('?')[0].split('#')[0];
137
+ const lastDot = parsed.lastIndexOf('.');
138
+ if (lastDot === -1)
139
+ return defaultExt;
140
+ const ext = parsed.slice(lastDot + 1).toLowerCase();
141
+ if (ext.length > 10 || ext.length === 0)
142
+ return defaultExt;
143
+ return ext;
144
+ }
145
+ // --- Date/time helpers ---
146
+ function parseDuration(s) {
147
+ if (typeof s === 'number')
148
+ return s;
149
+ if (typeof s !== 'string' || !s.trim())
150
+ return null;
151
+ const str = s.trim();
152
+ // HH:MM:SS or MM:SS or SS
153
+ const hmsMatch = str.match(/^(?:(\d+):)?(\d{1,2}):(\d{2})(?:\.(\d+))?$/);
154
+ if (hmsMatch) {
155
+ const hours = parseInt(hmsMatch[1] || '0', 10);
156
+ const mins = parseInt(hmsMatch[2], 10);
157
+ const secs = parseInt(hmsMatch[3], 10);
158
+ const frac = hmsMatch[4] ? parseFloat(`0.${hmsMatch[4]}`) : 0;
159
+ return hours * 3600 + mins * 60 + secs + frac;
160
+ }
161
+ // ISO 8601 duration PT1H2M3S
162
+ const isoMatch = str.match(/^P?T?(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?$/i);
163
+ if (isoMatch && (isoMatch[1] || isoMatch[2] || isoMatch[3])) {
164
+ const hours = parseInt(isoMatch[1] || '0', 10);
165
+ const mins = parseInt(isoMatch[2] || '0', 10);
166
+ const secs = parseFloat(isoMatch[3] || '0');
167
+ return hours * 3600 + mins * 60 + secs;
168
+ }
169
+ // Plain seconds
170
+ const secMatch = str.match(/^(\d+(?:\.\d+)?)$/);
171
+ if (secMatch)
172
+ return parseFloat(secMatch[1]);
173
+ return null;
174
+ }
175
+ function unifiedStrdate(dateStr) {
176
+ if (!dateStr)
177
+ return null;
178
+ const cleaned = dateStr.replace(/[,\s]+/g, ' ').trim();
179
+ const d = new Date(cleaned);
180
+ if (!isNaN(d.getTime())) {
181
+ const year = d.getUTCFullYear();
182
+ const month = String(d.getUTCMonth() + 1).padStart(2, '0');
183
+ const day = String(d.getUTCDate()).padStart(2, '0');
184
+ return `${year}${month}${day}`;
185
+ }
186
+ return null;
187
+ }
188
+ function unifiedTimestamp(dateStr) {
189
+ if (!dateStr)
190
+ return null;
191
+ const cleaned = dateStr.replace(/[,\s]+/g, ' ').trim();
192
+ const d = new Date(cleaned);
193
+ if (!isNaN(d.getTime())) {
194
+ return Math.floor(d.getTime() / 1000);
195
+ }
196
+ return null;
197
+ }
198
+ // --- Size formatting ---
199
+ const SIZE_UNITS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'];
200
+ function formatBytes(bytes) {
201
+ if (bytes === null || bytes === undefined || isNaN(bytes))
202
+ return 'N/A';
203
+ let size = bytes;
204
+ let unitIdx = 0;
205
+ while (size >= 1024 && unitIdx < SIZE_UNITS.length - 1) {
206
+ size /= 1024;
207
+ unitIdx++;
208
+ }
209
+ return `${size.toFixed(2)} ${SIZE_UNITS[unitIdx]}`;
210
+ }
211
+ function parseFilesize(s) {
212
+ if (!s)
213
+ return null;
214
+ const match = s.trim().match(/^(\d+(?:\.\d+)?)\s*(B|KB|KiB|MB|MiB|GB|GiB|TB|TiB)?$/i);
215
+ if (!match)
216
+ return null;
217
+ const num = parseFloat(match[1]);
218
+ const unit = (match[2] || 'B').toUpperCase();
219
+ const multipliers = {
220
+ 'B': 1, 'KB': 1000, 'KIB': 1024,
221
+ 'MB': 1e6, 'MIB': 1024 ** 2,
222
+ 'GB': 1e9, 'GIB': 1024 ** 3,
223
+ 'TB': 1e12, 'TIB': 1024 ** 4,
224
+ };
225
+ return Math.round(num * (multipliers[unit] || 1));
226
+ }
227
+ // --- MIME type helpers ---
228
+ const MIME_TO_EXT = {
229
+ 'video/mp4': 'mp4', 'video/webm': 'webm', 'video/x-flv': 'flv',
230
+ 'video/3gpp': '3gp', 'video/x-matroska': 'mkv', 'video/quicktime': 'mov',
231
+ 'video/x-msvideo': 'avi', 'video/x-ms-wmv': 'wmv',
232
+ 'audio/mp4': 'm4a', 'audio/mpeg': 'mp3', 'audio/webm': 'weba',
233
+ 'audio/ogg': 'ogg', 'audio/opus': 'opus', 'audio/flac': 'flac',
234
+ 'audio/wav': 'wav', 'audio/x-wav': 'wav', 'audio/aac': 'aac',
235
+ 'text/vtt': 'vtt', 'application/x-mpegURL': 'm3u8',
236
+ 'application/dash+xml': 'mpd', 'text/xml': 'xml',
237
+ 'application/ttml+xml': 'ttml',
238
+ };
239
+ function mimetypeToExt(mt) {
240
+ if (!mt)
241
+ return null;
242
+ const base = mt.split(';')[0].trim().toLowerCase();
243
+ return MIME_TO_EXT[base] || null;
244
+ }
245
+ // --- JSON helpers ---
246
+ function jsToJson(code) {
247
+ // Convert JavaScript object notation to valid JSON
248
+ let result = code;
249
+ // Remove single-line comments
250
+ result = result.replace(/\/\/[^\n]*/g, '');
251
+ // Remove multi-line comments
252
+ result = result.replace(/\/\*[\s\S]*?\*\//g, '');
253
+ // Replace single quotes with double quotes (basic — doesn't handle escaped quotes in all cases)
254
+ result = result.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, '"$1"');
255
+ // Add quotes to unquoted keys
256
+ result = result.replace(/(\{|,)\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g, '$1"$2":');
257
+ // Remove trailing commas
258
+ result = result.replace(/,\s*([\]}])/g, '$1');
259
+ return result;
260
+ }
261
+ function stripJsonp(code) {
262
+ return code.replace(/^[a-zA-Z_$][a-zA-Z0-9_$]*\s*\(\s*/, '').replace(/\s*\)\s*;?\s*$/, '');
263
+ }
264
+ // --- HTML extraction helpers ---
265
+ function getElementByID(id, html) {
266
+ const re = new RegExp(`<[^>]+\\bid\\s*=\\s*["']${escapeRegex(id)}["'][^>]*>([\\s\\S]*?)</`, 'i');
267
+ const match = html.match(re);
268
+ return match ? match[1] : null;
269
+ }
270
+ function getElementByClass(className, html) {
271
+ const re = new RegExp(`<[^>]+\\bclass\\s*=\\s*["'][^"']*\\b${escapeRegex(className)}\\b[^"']*["'][^>]*>([\\s\\S]*?)</`, 'i');
272
+ const match = html.match(re);
273
+ return match ? match[1] : null;
274
+ }
275
+ function extractAttributes(tag) {
276
+ const attrs = {};
277
+ const re = /\b([a-zA-Z_:][a-zA-Z0-9_:.-]*)\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S+))/g;
278
+ let match;
279
+ while ((match = re.exec(tag)) !== null) {
280
+ attrs[match[1]] = unescapeHTML(match[2] ?? match[3] ?? match[4]);
281
+ }
282
+ return attrs;
283
+ }
284
+ // --- Codec parsing ---
285
+ function parseCodecs(codecsStr) {
286
+ if (!codecsStr)
287
+ return {};
288
+ const codecs = codecsStr.split(',').map(c => c.trim());
289
+ const result = {};
290
+ for (const codec of codecs) {
291
+ if (/^(avc|hev|hvc|vp[089]|av01|theora)/i.test(codec)) {
292
+ result.vcodec = codec;
293
+ }
294
+ else if (/^(mp4a|opus|vorb|flac|ac-3|ec-3|dtse|mp3|aac)/i.test(codec)) {
295
+ result.acodec = codec;
296
+ }
297
+ }
298
+ return result;
299
+ }
300
+ // --- Miscellaneous ---
301
+ function variadic(x) {
302
+ return Array.isArray(x) ? x : [x];
303
+ }
304
+ function filterDict(dct, condition = (_, v) => v !== null && v !== undefined) {
305
+ const result = {};
306
+ for (const [key, val] of Object.entries(dct)) {
307
+ if (condition(key, val))
308
+ result[key] = val;
309
+ }
310
+ return result;
311
+ }
312
+ function mergeDicts(...dicts) {
313
+ const result = {};
314
+ for (const d of dicts) {
315
+ for (const [key, val] of Object.entries(d)) {
316
+ if (val !== null && val !== undefined && !(key in result && result[key] !== null && result[key] !== undefined)) {
317
+ result[key] = val;
318
+ }
319
+ }
320
+ }
321
+ return result;
322
+ }
323
+ function qualities(qualityIds) {
324
+ return (id) => {
325
+ const idx = qualityIds.indexOf(id);
326
+ return idx;
327
+ };
328
+ }
329
+ function escapeRegex(s) {
330
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
331
+ }
332
+ function orderedSet(iterable) {
333
+ const seen = new Set();
334
+ const result = [];
335
+ for (const item of iterable) {
336
+ if (!seen.has(item)) {
337
+ seen.add(item);
338
+ result.push(item);
339
+ }
340
+ }
341
+ return result;
342
+ }
343
+ function formatField(obj, field, template = '%s', defaultVal = '') {
344
+ let val;
345
+ if (field) {
346
+ val = typeof obj === 'object' && obj !== null ? obj[field] : undefined;
347
+ }
348
+ else {
349
+ val = obj;
350
+ }
351
+ if (val === null || val === undefined || val === '')
352
+ return defaultVal;
353
+ return template.replace('%s', String(val));
354
+ }
355
+ function removeStart(s, start) {
356
+ return s.startsWith(start) ? s.slice(start.length) : s;
357
+ }
358
+ function removeEnd(s, end) {
359
+ return s.endsWith(end) ? s.slice(0, -end.length) : s;
360
+ }
361
+ function sleep(ms) {
362
+ return new Promise(resolve => setTimeout(resolve, ms));
363
+ }
364
+ class ExtractorError extends Error {
365
+ cause_;
366
+ video_id;
367
+ constructor(message, cause_, video_id) {
368
+ super(message);
369
+ this.cause_ = cause_;
370
+ this.video_id = video_id;
371
+ this.name = 'ExtractorError';
372
+ }
373
+ }
374
+ exports.ExtractorError = ExtractorError;
375
+ class DownloadError extends Error {
376
+ constructor(message) {
377
+ super(message);
378
+ this.name = 'DownloadError';
379
+ }
380
+ }
381
+ exports.DownloadError = DownloadError;
382
+ class GeoRestrictedError extends ExtractorError {
383
+ constructor(message = 'This content is not available in your region') {
384
+ super(message);
385
+ this.name = 'GeoRestrictedError';
386
+ }
387
+ }
388
+ exports.GeoRestrictedError = GeoRestrictedError;
389
+ class UnsupportedError extends ExtractorError {
390
+ constructor(url) {
391
+ super(`Unsupported URL: ${url}`);
392
+ this.name = 'UnsupportedError';
393
+ }
394
+ }
395
+ exports.UnsupportedError = UnsupportedError;
396
+ class RegexNotFoundError extends ExtractorError {
397
+ constructor(name) {
398
+ super(`Unable to extract ${name}`);
399
+ this.name = 'RegexNotFoundError';
400
+ }
401
+ }
402
+ exports.RegexNotFoundError = RegexNotFoundError;
403
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Ported from yt_dlp/utils/traversal.py
3
+ * Safe nested data traversal with multiple path support.
4
+ */
5
+ /**
6
+ * Safely traverse nested objects/arrays following the given paths.
7
+ *
8
+ * @param obj - The object to traverse
9
+ * @param paths - One or more path arrays. Each path is an array of keys/indices.
10
+ * @param options - default value, expected_type, get_all flag
11
+ *
12
+ * Usage:
13
+ * traverseObj(data, ['video', 0, 'url'])
14
+ * traverseObj(data, ['video', 'title'], ['name'], { default: 'Unknown' })
15
+ */
16
+ export declare function traverseObj(obj: unknown, ...args: unknown[]): unknown;
17
+ /**
18
+ * Safe getter — tries a function and returns default on error.
19
+ * Port of try_get from yt_dlp.
20
+ */
21
+ export declare function tryGet<T>(src: unknown, getter: ((v: unknown) => T) | ((v: unknown) => T)[], expectedType?: (v: unknown) => boolean): T | undefined;
22
+ //# sourceMappingURL=traversal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../../src/utils/traversal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAyBT;AA4CD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,EACnD,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,GACrC,CAAC,GAAG,SAAS,CAaf"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Ported from yt_dlp/utils/traversal.py
4
+ * Safe nested data traversal with multiple path support.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.traverseObj = traverseObj;
8
+ exports.tryGet = tryGet;
9
+ const NO_DEFAULT = Symbol('NO_DEFAULT');
10
+ /**
11
+ * Safely traverse nested objects/arrays following the given paths.
12
+ *
13
+ * @param obj - The object to traverse
14
+ * @param paths - One or more path arrays. Each path is an array of keys/indices.
15
+ * @param options - default value, expected_type, get_all flag
16
+ *
17
+ * Usage:
18
+ * traverseObj(data, ['video', 0, 'url'])
19
+ * traverseObj(data, ['video', 'title'], ['name'], { default: 'Unknown' })
20
+ */
21
+ function traverseObj(obj, ...args) {
22
+ let options = {};
23
+ let paths = [];
24
+ for (const arg of args) {
25
+ if (Array.isArray(arg)) {
26
+ paths.push(arg);
27
+ }
28
+ else if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {
29
+ options = arg;
30
+ }
31
+ }
32
+ if (paths.length === 0)
33
+ return options.default;
34
+ const { default: defaultVal, expected_type, get_all = true } = options;
35
+ for (const path of paths) {
36
+ const result = traversePath(obj, path, get_all);
37
+ if (result !== undefined && result !== null) {
38
+ if (expected_type && !expected_type(result))
39
+ continue;
40
+ return result;
41
+ }
42
+ }
43
+ return defaultVal;
44
+ }
45
+ function traversePath(obj, path, getAll) {
46
+ let current = obj;
47
+ for (const key of path) {
48
+ if (current === null || current === undefined)
49
+ return undefined;
50
+ if (typeof key === 'string' || typeof key === 'number') {
51
+ if (Array.isArray(current)) {
52
+ if (typeof key === 'number') {
53
+ current = current[key < 0 ? current.length + key : key];
54
+ }
55
+ else {
56
+ // Try to get from array of objects
57
+ const results = current
58
+ .map(item => (item && typeof item === 'object' ? item[key] : undefined))
59
+ .filter(v => v !== undefined);
60
+ current = getAll ? results : results[0];
61
+ }
62
+ }
63
+ else if (typeof current === 'object') {
64
+ current = current[String(key)];
65
+ }
66
+ else {
67
+ return undefined;
68
+ }
69
+ }
70
+ else if (typeof key === 'function') {
71
+ if (Array.isArray(current)) {
72
+ const results = current.filter(key);
73
+ current = getAll ? results : results[0];
74
+ }
75
+ else {
76
+ current = key(current) ? current : undefined;
77
+ }
78
+ }
79
+ else if (key === null || key === undefined) {
80
+ // Ellipsis equivalent — get all values
81
+ if (Array.isArray(current)) {
82
+ // current stays as array
83
+ }
84
+ else if (typeof current === 'object') {
85
+ current = Object.values(current);
86
+ }
87
+ }
88
+ }
89
+ return current;
90
+ }
91
+ /**
92
+ * Safe getter — tries a function and returns default on error.
93
+ * Port of try_get from yt_dlp.
94
+ */
95
+ function tryGet(src, getter, expectedType) {
96
+ const getters = Array.isArray(getter) ? getter : [getter];
97
+ for (const fn of getters) {
98
+ try {
99
+ const result = fn(src);
100
+ if (result === undefined || result === null)
101
+ continue;
102
+ if (expectedType && !expectedType(result))
103
+ continue;
104
+ return result;
105
+ }
106
+ catch {
107
+ continue;
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ //# sourceMappingURL=traversal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traversal.js","sourceRoot":"","sources":["../../src/utils/traversal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * YtGrab - Main orchestrator class
3
+ * Ported from yt_dlp/YoutubeDL.py
4
+ *
5
+ * Coordinates extractors, downloaders, and post-processors.
6
+ */
7
+ import type { InfoDict, VideoFormat, YtGrabOptions, Subtitle } from './types.js';
8
+ export declare class YtGrab {
9
+ readonly params: YtGrabOptions;
10
+ private _extractors;
11
+ private _postProcessors;
12
+ private _progressHooks;
13
+ constructor(options?: YtGrabOptions);
14
+ private _setupPostProcessors;
15
+ /**
16
+ * Extract info from a URL without downloading.
17
+ */
18
+ getInfo(url: string): Promise<InfoDict>;
19
+ /**
20
+ * Extract info and download.
21
+ */
22
+ download(urls: string | string[]): Promise<InfoDict[]>;
23
+ /**
24
+ * List available formats for a URL.
25
+ */
26
+ listFormats(url: string): Promise<VideoFormat[]>;
27
+ /**
28
+ * List available subtitles for a URL.
29
+ */
30
+ listSubtitles(url: string): Promise<{
31
+ subtitles: Record<string, Subtitle[]>;
32
+ automatic_captions: Record<string, Subtitle[]>;
33
+ }>;
34
+ extractInfo(url: string, download?: boolean): Promise<InfoDict>;
35
+ processInfo(info: InfoDict): Promise<void>;
36
+ private _selectFormat;
37
+ private _prepareFilename;
38
+ private _downloadSubtitles;
39
+ private _downloadThumbnail;
40
+ private _writeInfoJson;
41
+ private _printFormats;
42
+ private _printSubtitles;
43
+ private _findExtractor;
44
+ toScreen(msg: string): void;
45
+ reportWarning(msg: string): void;
46
+ reportError(msg: string): void;
47
+ }
48
+ //# sourceMappingURL=ytgrab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ytgrab.d.ts","sourceRoot":"","sources":["../src/ytgrab.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,KAAK,EACV,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAgB,QAAQ,EAC7D,MAAM,YAAY,CAAC;AAEpB,qBAAa,MAAM;IACjB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAsB;gBAEhC,OAAO,GAAE,aAAkB;IA6BvC,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7C;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwB5D;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKtD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;KAChD,CAAC;IAUI,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgBrE,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwFhD,OAAO,CAAC,aAAa;IAqDrB,OAAO,CAAC,gBAAgB;YA8BV,kBAAkB;YAqElB,kBAAkB;YAmBlB,cAAc;IAS5B,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,cAAc;IAStB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK3B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG/B"}