tor-dl 1.0.14 → 1.0.15

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 (120) hide show
  1. package/dist/cli/display.d.ts.map +1 -1
  2. package/dist/cli/display.js +68 -2
  3. package/dist/cli/display.js.map +1 -1
  4. package/dist/sources/yts.js +1 -1
  5. package/dist/sources/yts.js.map +1 -1
  6. package/package.json +34 -34
  7. package/src/cli/display.ts +59 -2
  8. package/src/sources/yts.ts +85 -85
  9. package/dist/cli/progress.d.ts +0 -15
  10. package/dist/cli/progress.d.ts.map +0 -1
  11. package/dist/cli/progress.js +0 -76
  12. package/dist/cli/progress.js.map +0 -1
  13. package/dist/src/cli/display.d.ts +0 -7
  14. package/dist/src/cli/display.d.ts.map +0 -1
  15. package/dist/src/cli/display.js +0 -59
  16. package/dist/src/cli/display.js.map +0 -1
  17. package/dist/src/cli/parser.d.ts +0 -5
  18. package/dist/src/cli/parser.d.ts.map +0 -1
  19. package/dist/src/cli/parser.js +0 -122
  20. package/dist/src/cli/parser.js.map +0 -1
  21. package/dist/src/cli/progress.d.ts +0 -15
  22. package/dist/src/cli/progress.d.ts.map +0 -1
  23. package/dist/src/cli/progress.js +0 -76
  24. package/dist/src/cli/progress.js.map +0 -1
  25. package/dist/src/commands/download.d.ts +0 -2
  26. package/dist/src/commands/download.d.ts.map +0 -1
  27. package/dist/src/commands/download.js +0 -70
  28. package/dist/src/commands/download.js.map +0 -1
  29. package/dist/src/commands/search.d.ts +0 -3
  30. package/dist/src/commands/search.d.ts.map +0 -1
  31. package/dist/src/commands/search.js +0 -46
  32. package/dist/src/commands/search.js.map +0 -1
  33. package/dist/src/commands/update.d.ts +0 -2
  34. package/dist/src/commands/update.d.ts.map +0 -1
  35. package/dist/src/commands/update.js +0 -32
  36. package/dist/src/commands/update.js.map +0 -1
  37. package/dist/src/download/engine.d.ts +0 -6
  38. package/dist/src/download/engine.d.ts.map +0 -1
  39. package/dist/src/download/engine.js +0 -163
  40. package/dist/src/download/engine.js.map +0 -1
  41. package/dist/src/filters/category.d.ts +0 -3
  42. package/dist/src/filters/category.d.ts.map +0 -1
  43. package/dist/src/filters/category.js +0 -24
  44. package/dist/src/filters/category.js.map +0 -1
  45. package/dist/src/filters/index.d.ts +0 -5
  46. package/dist/src/filters/index.d.ts.map +0 -1
  47. package/dist/src/filters/index.js +0 -13
  48. package/dist/src/filters/index.js.map +0 -1
  49. package/dist/src/filters/seeds.d.ts +0 -3
  50. package/dist/src/filters/seeds.d.ts.map +0 -1
  51. package/dist/src/filters/seeds.js +0 -7
  52. package/dist/src/filters/seeds.js.map +0 -1
  53. package/dist/src/filters/size.d.ts +0 -4
  54. package/dist/src/filters/size.d.ts.map +0 -1
  55. package/dist/src/filters/size.js +0 -36
  56. package/dist/src/filters/size.js.map +0 -1
  57. package/dist/src/filters/sort.d.ts +0 -5
  58. package/dist/src/filters/sort.d.ts.map +0 -1
  59. package/dist/src/filters/sort.js +0 -25
  60. package/dist/src/filters/sort.js.map +0 -1
  61. package/dist/src/index.d.ts +0 -11
  62. package/dist/src/index.d.ts.map +0 -1
  63. package/dist/src/index.js +0 -30
  64. package/dist/src/index.js.map +0 -1
  65. package/dist/src/sources/1337x.d.ts +0 -11
  66. package/dist/src/sources/1337x.d.ts.map +0 -1
  67. package/dist/src/sources/1337x.js +0 -121
  68. package/dist/src/sources/1337x.js.map +0 -1
  69. package/dist/src/sources/eztv.d.ts +0 -11
  70. package/dist/src/sources/eztv.d.ts.map +0 -1
  71. package/dist/src/sources/eztv.js +0 -104
  72. package/dist/src/sources/eztv.js.map +0 -1
  73. package/dist/src/sources/httpClient.d.ts +0 -24
  74. package/dist/src/sources/httpClient.d.ts.map +0 -1
  75. package/dist/src/sources/httpClient.js +0 -42
  76. package/dist/src/sources/httpClient.js.map +0 -1
  77. package/dist/src/sources/limetorrent.d.ts +0 -11
  78. package/dist/src/sources/limetorrent.d.ts.map +0 -1
  79. package/dist/src/sources/limetorrent.js +0 -113
  80. package/dist/src/sources/limetorrent.js.map +0 -1
  81. package/dist/src/sources/nyaa.d.ts +0 -11
  82. package/dist/src/sources/nyaa.d.ts.map +0 -1
  83. package/dist/src/sources/nyaa.js +0 -119
  84. package/dist/src/sources/nyaa.js.map +0 -1
  85. package/dist/src/sources/rarbg.d.ts +0 -11
  86. package/dist/src/sources/rarbg.d.ts.map +0 -1
  87. package/dist/src/sources/rarbg.js +0 -122
  88. package/dist/src/sources/rarbg.js.map +0 -1
  89. package/dist/src/sources/registry.d.ts +0 -9
  90. package/dist/src/sources/registry.d.ts.map +0 -1
  91. package/dist/src/sources/registry.js +0 -70
  92. package/dist/src/sources/registry.js.map +0 -1
  93. package/dist/src/sources/solidtorrents.d.ts +0 -11
  94. package/dist/src/sources/solidtorrents.d.ts.map +0 -1
  95. package/dist/src/sources/solidtorrents.js +0 -105
  96. package/dist/src/sources/solidtorrents.js.map +0 -1
  97. package/dist/src/sources/thepiratebay.d.ts +0 -11
  98. package/dist/src/sources/thepiratebay.d.ts.map +0 -1
  99. package/dist/src/sources/thepiratebay.js +0 -67
  100. package/dist/src/sources/thepiratebay.js.map +0 -1
  101. package/dist/src/sources/torlock.d.ts +0 -11
  102. package/dist/src/sources/torlock.d.ts.map +0 -1
  103. package/dist/src/sources/torlock.js +0 -116
  104. package/dist/src/sources/torlock.js.map +0 -1
  105. package/dist/src/sources/torrentproject.d.ts +0 -11
  106. package/dist/src/sources/torrentproject.d.ts.map +0 -1
  107. package/dist/src/sources/torrentproject.js +0 -105
  108. package/dist/src/sources/torrentproject.js.map +0 -1
  109. package/dist/src/sources/torrentscsv.d.ts +0 -11
  110. package/dist/src/sources/torrentscsv.d.ts.map +0 -1
  111. package/dist/src/sources/torrentscsv.js +0 -62
  112. package/dist/src/sources/torrentscsv.js.map +0 -1
  113. package/dist/src/sources/yts.d.ts +0 -12
  114. package/dist/src/sources/yts.d.ts.map +0 -1
  115. package/dist/src/sources/yts.js +0 -88
  116. package/dist/src/sources/yts.js.map +0 -1
  117. package/dist/src/types.d.ts +0 -60
  118. package/dist/src/types.d.ts.map +0 -1
  119. package/dist/src/types.js +0 -3
  120. package/dist/src/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAmC7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAiEzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAmC7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -10,6 +10,72 @@ exports.displaySuccess = displaySuccess;
10
10
  exports.displayInfo = displayInfo;
11
11
  const chalk_1 = __importDefault(require("chalk"));
12
12
  chalk_1.default.level = 1;
13
+ function isWideChar(code) {
14
+ if (code > 0xFFFF)
15
+ return true;
16
+ if (code > 255)
17
+ return true;
18
+ if (code >= 0x1100 && code <= 0x115F)
19
+ return true;
20
+ if (code >= 0x2329 && code <= 0x232A)
21
+ return true;
22
+ if (code >= 0x2E80 && code <= 0x303E)
23
+ return true;
24
+ if (code >= 0x3040 && code <= 0xA4CF)
25
+ return true;
26
+ if (code >= 0xAC00 && code <= 0xD7A3)
27
+ return true;
28
+ if (code >= 0xF900 && code <= 0xFAFF)
29
+ return true;
30
+ if (code >= 0xFE10 && code <= 0xFE19)
31
+ return true;
32
+ if (code >= 0xFE30 && code <= 0xFE6F)
33
+ return true;
34
+ if (code >= 0xFF00 && code <= 0xFF60)
35
+ return true;
36
+ if (code >= 0xFFE0 && code <= 0xFFE6)
37
+ return true;
38
+ return false;
39
+ }
40
+ function displayWidth(str) {
41
+ let width = 0;
42
+ for (const char of str) {
43
+ const cp = char.codePointAt(0);
44
+ width += isWideChar(cp) ? 2 : 1;
45
+ }
46
+ return width;
47
+ }
48
+ function truncateWide(str, maxWidth) {
49
+ let width = 0;
50
+ let result = '';
51
+ for (const char of str) {
52
+ const cp = char.codePointAt(0);
53
+ const charWidth = isWideChar(cp) ? 2 : 1;
54
+ if (width + charWidth > maxWidth - 3)
55
+ break;
56
+ result += char;
57
+ width += charWidth;
58
+ }
59
+ return result + '...';
60
+ }
61
+ function padEndWide(str, targetWidth) {
62
+ const currentWidth = displayWidth(str);
63
+ const padding = targetWidth - currentWidth;
64
+ if (padding <= 0)
65
+ return str;
66
+ return str + ' '.repeat(padding);
67
+ }
68
+ function padEndWideExtra(str, targetWidth) {
69
+ const currentWidth = displayWidth(str);
70
+ const padding = targetWidth - currentWidth;
71
+ if (padding < 0) {
72
+ if ([...str].some(c => c.codePointAt(0) > 255)) {
73
+ return str + ' ';
74
+ }
75
+ return str;
76
+ }
77
+ return str + ' '.repeat(padding);
78
+ }
13
79
  function makeClickable(url, text) {
14
80
  return `\u001b]8;;${url}\u0007${text}\u001b]8;;\u0007`;
15
81
  }
@@ -25,7 +91,7 @@ function displayResults(results) {
25
91
  '├─────┼───┼──────────────────────────────────────────────────────────────────────────────────┼────────┼───────┼───────┼────────┤'
26
92
  ].join('\n'));
27
93
  for (const r of results) {
28
- const name = r.name.length > 80 ? r.name.substring(0, 77) + '...' : r.name;
94
+ const name = displayWidth(r.name) > 80 ? truncateWide(r.name, 80) : r.name;
29
95
  const size = r.size ? r.size.slice(0, 6).padEnd(6) : 'N/A ';
30
96
  const seeds = r.seeds > 100 ? chalk_1.default.green(r.seeds.toString().padStart(5)) : r.seeds > 50 ? chalk_1.default.yellow(r.seeds.toString().padStart(5)) : r.seeds.toString().padStart(5);
31
97
  const peers = r.peers > 50 ? chalk_1.default.cyan(r.peers.toString().padStart(5)) : r.peers.toString().padStart(5);
@@ -33,7 +99,7 @@ function displayResults(results) {
33
99
  const num = chalk_1.default.cyan(r.num.toString().padStart(3));
34
100
  const url = r.torrentUrl || r.magnet || '';
35
101
  const pageUrl = r.url || '';
36
- const clickableName = url ? makeClickable(url, name.padEnd(80)) : name.padEnd(80);
102
+ const clickableName = url ? makeClickable(url, padEndWideExtra(name, 80)) : padEndWideExtra(name, 80);
37
103
  const clickableLink = pageUrl ? makeClickable(pageUrl, chalk_1.default.green('✓')) : chalk_1.default.gray(' ');
38
104
  out(`│ ${num} │ ${clickableLink} │ ${clickableName} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
39
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ class YtsScraper {
34
34
  seeds: movie.torrents?.[0]?.seeds || 0,
35
35
  peers: movie.torrents?.[0]?.peers || 0,
36
36
  source: 'YTS',
37
- url: movie.torrents?.[0]?.url || '',
37
+ url: movie.url || '',
38
38
  torrentUrl: movie.torrents?.[0]?.url || '',
39
39
  magnet: movie.torrents?.[0]?.hash ? `magnet:?xt=urn:btih:${movie.torrents[0].hash}` : '',
40
40
  hash: movie.torrents?.[0]?.hash
@@ -1 +1 @@
1
- {"version":3,"file":"yts.js","sourceRoot":"","sources":["../../src/sources/yts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yts.js","sourceRoot":"","sources":["../../src/sources/yts.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,6CAAmD;AAEnD,MAAa,UAAU;IAAvB;QACE,SAAI,GAAG,KAAK,CAAC;IA6Ef,CAAC;IA3EC,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAiB;QAC3C,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,qDAAqD,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;YACtG,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpC,OAAO,EAAE,IAAA,uBAAU,GAAE;gBACrB,OAAO,EAAE,oBAAO;aACjB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAoB,EAAE,CAAC;YAEpC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS,CAAC;oBAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC;oBACjD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC7C,OAAO,CAAC,IAAI,CAAC;wBACX,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;wBACvB,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;wBACjD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;wBAChC,SAAS,EAAE,SAAS;wBACpB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;wBACtC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;wBACtC,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;wBACpB,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;wBAC1C,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;wBACxF,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAqB;QACvC,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAqB;QACnC,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,WAAW,GAA2B;YAC1C,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,IAAI,CAAC;SAChB,CAAC;QACF,OAAO,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3D,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClE,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClF,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3D,CAAC;CACF;AA9ED,gCA8EC;AAED,kBAAe,IAAI,UAAU,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,34 +1,34 @@
1
- {
2
- "name": "tor-dl",
3
- "version": "1.0.14",
4
- "description": "CLI torrent search tool - search, open in browser, copy magnet links",
5
- "main": "dist/index.js",
6
- "bin": {
7
- "tor-dl": "dist/bin/tor-dl.js"
8
- },
9
- "scripts": {
10
- "build": "tsc && node scripts/build.js",
11
- "start": "node dist/bin/tor-dl.js"
12
- },
13
- "dependencies": {
14
- "axios": "^1.6.0",
15
- "chalk": "^4.1.2",
16
- "cheerio": "^1.0.0-rc.12",
17
- "commander": "^11.1.0",
18
- "ora": "^6.3.1"
19
- },
20
- "devDependencies": {
21
- "@types/node": "^20.10.0",
22
- "typescript": "^5.3.0"
23
- },
24
- "engines": {
25
- "node": ">=18.0.0"
26
- },
27
- "keywords": ["tor-dl", "torrent", "downloader"],
28
- "author": "Sedat ERGOZ",
29
- "license": "ISC",
30
- "repository": {
31
- "type": "git",
32
- "url": "git+https://github.com/eaeoz/tor-dl.git"
33
- }
34
- }
1
+ {
2
+ "name": "tor-dl",
3
+ "version": "1.0.15",
4
+ "description": "CLI torrent search tool - search, open in browser, copy magnet links",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "tor-dl": "dist/bin/tor-dl.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc && node scripts/build.js",
11
+ "start": "node dist/bin/tor-dl.js"
12
+ },
13
+ "dependencies": {
14
+ "axios": "^1.6.0",
15
+ "chalk": "^4.1.2",
16
+ "cheerio": "^1.0.0-rc.12",
17
+ "commander": "^11.1.0",
18
+ "ora": "^6.3.1"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^20.10.0",
22
+ "typescript": "^5.3.0"
23
+ },
24
+ "engines": {
25
+ "node": ">=18.0.0"
26
+ },
27
+ "keywords": ["tor-dl", "torrent", "downloader"],
28
+ "author": "Sedat ERGOZ",
29
+ "license": "ISC",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/eaeoz/tor-dl.git"
33
+ }
34
+ }
@@ -3,6 +3,63 @@ import { TorrentResult } from '../types';
3
3
 
4
4
  (chalk as any).level = 1;
5
5
 
6
+ function isWideChar(code: number): boolean {
7
+ if (code > 0xFFFF) return true;
8
+ if (code > 255) return true;
9
+ if (code >= 0x1100 && code <= 0x115F) return true;
10
+ if (code >= 0x2329 && code <= 0x232A) return true;
11
+ if (code >= 0x2E80 && code <= 0x303E) return true;
12
+ if (code >= 0x3040 && code <= 0xA4CF) return true;
13
+ if (code >= 0xAC00 && code <= 0xD7A3) return true;
14
+ if (code >= 0xF900 && code <= 0xFAFF) return true;
15
+ if (code >= 0xFE10 && code <= 0xFE19) return true;
16
+ if (code >= 0xFE30 && code <= 0xFE6F) return true;
17
+ if (code >= 0xFF00 && code <= 0xFF60) return true;
18
+ if (code >= 0xFFE0 && code <= 0xFFE6) return true;
19
+ return false;
20
+ }
21
+
22
+ function displayWidth(str: string): number {
23
+ let width = 0;
24
+ for (const char of str) {
25
+ const cp = char.codePointAt(0)!;
26
+ width += isWideChar(cp) ? 2 : 1;
27
+ }
28
+ return width;
29
+ }
30
+
31
+ function truncateWide(str: string, maxWidth: number): string {
32
+ let width = 0;
33
+ let result = '';
34
+ for (const char of str) {
35
+ const cp = char.codePointAt(0)!;
36
+ const charWidth = isWideChar(cp) ? 2 : 1;
37
+ if (width + charWidth > maxWidth - 3) break;
38
+ result += char;
39
+ width += charWidth;
40
+ }
41
+ return result + '...';
42
+ }
43
+
44
+ function padEndWide(str: string, targetWidth: number): string {
45
+ const currentWidth = displayWidth(str);
46
+ const padding = targetWidth - currentWidth;
47
+ if (padding <= 0) return str;
48
+ return str + ' '.repeat(padding);
49
+ }
50
+
51
+ function padEndWideExtra(str: string, targetWidth: number): string {
52
+ const currentWidth = displayWidth(str);
53
+ const padding = targetWidth - currentWidth;
54
+ if (padding < 0) {
55
+ if ([...str].some(c => c.codePointAt(0)! > 255)) {
56
+ return str + ' ';
57
+ }
58
+ return str;
59
+ }
60
+ return str + ' '.repeat(padding);
61
+ }
62
+
6
63
  function makeClickable(url: string, text: string): string {
7
64
  return `\u001b]8;;${url}\u0007${text}\u001b]8;;\u0007`;
8
65
  }
@@ -22,7 +79,7 @@ export function displayResults(results: TorrentResult[]): void {
22
79
  ].join('\n'));
23
80
 
24
81
  for (const r of results) {
25
- const name = r.name.length > 80 ? r.name.substring(0, 77) + '...' : r.name;
82
+ const name = displayWidth(r.name) > 80 ? truncateWide(r.name, 80) : r.name;
26
83
  const size = r.size ? r.size.slice(0, 6).padEnd(6) : 'N/A ';
27
84
  const seeds = r.seeds > 100 ? chalk.green(r.seeds.toString().padStart(5)) : r.seeds > 50 ? chalk.yellow(r.seeds.toString().padStart(5)) : r.seeds.toString().padStart(5);
28
85
  const peers = r.peers > 50 ? chalk.cyan(r.peers.toString().padStart(5)) : r.peers.toString().padStart(5);
@@ -32,7 +89,7 @@ export function displayResults(results: TorrentResult[]): void {
32
89
  const url = r.torrentUrl || r.magnet || '';
33
90
  const pageUrl = r.url || '';
34
91
 
35
- const clickableName = url ? makeClickable(url, name.padEnd(80)) : name.padEnd(80);
92
+ const clickableName = url ? makeClickable(url, padEndWideExtra(name, 80)) : padEndWideExtra(name, 80);
36
93
  const clickableLink = pageUrl ? makeClickable(pageUrl, chalk.green('✓')) : chalk.gray(' ');
37
94
 
38
95
  out(`│ ${num} │ ${clickableLink} │ ${clickableName} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
@@ -1,86 +1,86 @@
1
- import axios from 'axios';
2
- import * as cheerio from 'cheerio';
3
- import { TorrentResult, SourceScraper } from '../types';
4
- import { getHeaders, TIMEOUT } from './httpClient';
5
-
6
- export class YtsScraper implements SourceScraper {
7
- name = 'YTS';
8
-
9
- async search(query: string, category?: string): Promise<TorrentResult[]> {
10
- if (category && category.toLowerCase() === 'tv') {
11
- return [];
12
- }
13
-
14
- try {
15
- const url = `https://yts.lt/api/v2/list_movies.json?query_term=${encodeURIComponent(query)}&limit=50`;
16
- const { data } = await axios.get(url, {
17
- headers: getHeaders(),
18
- timeout: TIMEOUT
19
- });
20
-
21
- const results: TorrentResult[] = [];
22
-
23
- if (data.data && data.data.movies) {
24
- for (const movie of data.data.movies) {
25
- const quality = movie.torrents?.[0]?.quality || 'Unknown';
26
- const sizeStr = movie.torrents?.[0]?.size || '0';
27
- const sizeBytes = this.parseSizeStr(sizeStr);
28
- results.push({
29
- num: results.length + 1,
30
- name: `${movie.title} (${movie.year}) ${quality}`,
31
- size: this.formatSize(sizeBytes),
32
- sizeBytes: sizeBytes,
33
- seeds: movie.torrents?.[0]?.seeds || 0,
34
- peers: movie.torrents?.[0]?.peers || 0,
35
- source: 'YTS',
36
- url: movie.torrents?.[0]?.url || '',
37
- torrentUrl: movie.torrents?.[0]?.url || '',
38
- magnet: movie.torrents?.[0]?.hash ? `magnet:?xt=urn:btih:${movie.torrents[0].hash}` : '',
39
- hash: movie.torrents?.[0]?.hash
40
- });
41
- }
42
- }
43
-
44
- return results;
45
- } catch (error: unknown) {
46
- const message = error instanceof Error ? error.message : 'Unknown error';
47
- console.error(`YTS search error: ${message}`);
48
- return [];
49
- }
50
- }
51
-
52
- async getTorrentUrl(result: TorrentResult): Promise<string> {
53
- return result.url;
54
- }
55
-
56
- async getMagnet(result: TorrentResult): Promise<string> {
57
- return result.magnet || '';
58
- }
59
-
60
- private parseSizeStr(sizeStr: string): number {
61
- if (!sizeStr || typeof sizeStr !== 'string') return 0;
62
- const match = sizeStr.match(/([\d.]+)\s*(GB|MB|KB|TB)/i);
63
- if (!match) return 0;
64
- const value = parseFloat(match[1]);
65
- const unit = match[2].toUpperCase();
66
- const multipliers: Record<string, number> = {
67
- 'KB': 1024,
68
- 'MB': 1024 ** 2,
69
- 'GB': 1024 ** 3,
70
- 'TB': 1024 ** 4
71
- };
72
- return value * (multipliers[unit] || 0);
73
- }
74
-
75
- private formatSize(bytes: number): string {
76
- if (typeof bytes !== 'number' || isNaN(bytes) || bytes === 0) {
77
- return 'Unknown';
78
- }
79
- if (bytes < 1024) return (bytes / 1024).toFixed(2) + ' KB';
80
- if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + ' KB';
81
- if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
82
- return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
83
- }
84
- }
85
-
1
+ import axios from 'axios';
2
+ import * as cheerio from 'cheerio';
3
+ import { TorrentResult, SourceScraper } from '../types';
4
+ import { getHeaders, TIMEOUT } from './httpClient';
5
+
6
+ export class YtsScraper implements SourceScraper {
7
+ name = 'YTS';
8
+
9
+ async search(query: string, category?: string): Promise<TorrentResult[]> {
10
+ if (category && category.toLowerCase() === 'tv') {
11
+ return [];
12
+ }
13
+
14
+ try {
15
+ const url = `https://yts.lt/api/v2/list_movies.json?query_term=${encodeURIComponent(query)}&limit=50`;
16
+ const { data } = await axios.get(url, {
17
+ headers: getHeaders(),
18
+ timeout: TIMEOUT
19
+ });
20
+
21
+ const results: TorrentResult[] = [];
22
+
23
+ if (data.data && data.data.movies) {
24
+ for (const movie of data.data.movies) {
25
+ const quality = movie.torrents?.[0]?.quality || 'Unknown';
26
+ const sizeStr = movie.torrents?.[0]?.size || '0';
27
+ const sizeBytes = this.parseSizeStr(sizeStr);
28
+ results.push({
29
+ num: results.length + 1,
30
+ name: `${movie.title} (${movie.year}) ${quality}`,
31
+ size: this.formatSize(sizeBytes),
32
+ sizeBytes: sizeBytes,
33
+ seeds: movie.torrents?.[0]?.seeds || 0,
34
+ peers: movie.torrents?.[0]?.peers || 0,
35
+ source: 'YTS',
36
+ url: movie.url || '',
37
+ torrentUrl: movie.torrents?.[0]?.url || '',
38
+ magnet: movie.torrents?.[0]?.hash ? `magnet:?xt=urn:btih:${movie.torrents[0].hash}` : '',
39
+ hash: movie.torrents?.[0]?.hash
40
+ });
41
+ }
42
+ }
43
+
44
+ return results;
45
+ } catch (error: unknown) {
46
+ const message = error instanceof Error ? error.message : 'Unknown error';
47
+ console.error(`YTS search error: ${message}`);
48
+ return [];
49
+ }
50
+ }
51
+
52
+ async getTorrentUrl(result: TorrentResult): Promise<string> {
53
+ return result.url;
54
+ }
55
+
56
+ async getMagnet(result: TorrentResult): Promise<string> {
57
+ return result.magnet || '';
58
+ }
59
+
60
+ private parseSizeStr(sizeStr: string): number {
61
+ if (!sizeStr || typeof sizeStr !== 'string') return 0;
62
+ const match = sizeStr.match(/([\d.]+)\s*(GB|MB|KB|TB)/i);
63
+ if (!match) return 0;
64
+ const value = parseFloat(match[1]);
65
+ const unit = match[2].toUpperCase();
66
+ const multipliers: Record<string, number> = {
67
+ 'KB': 1024,
68
+ 'MB': 1024 ** 2,
69
+ 'GB': 1024 ** 3,
70
+ 'TB': 1024 ** 4
71
+ };
72
+ return value * (multipliers[unit] || 0);
73
+ }
74
+
75
+ private formatSize(bytes: number): string {
76
+ if (typeof bytes !== 'number' || isNaN(bytes) || bytes === 0) {
77
+ return 'Unknown';
78
+ }
79
+ if (bytes < 1024) return (bytes / 1024).toFixed(2) + ' KB';
80
+ if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + ' KB';
81
+ if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
82
+ return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
83
+ }
84
+ }
85
+
86
86
  export default new YtsScraper();
@@ -1,15 +0,0 @@
1
- export declare class DownloadProgress {
2
- private bar;
3
- private startTime;
4
- private totalBytes;
5
- private downloadedBytes;
6
- constructor();
7
- start(total: number): void;
8
- update(downloaded: number, total: number): void;
9
- private calculateSpeed;
10
- private calculateETA;
11
- private formatBytes;
12
- stop(): void;
13
- getTotalDownloaded(): number;
14
- }
15
- //# sourceMappingURL=progress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAa;;IAcpC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAe/C,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,WAAW;IAOnB,IAAI,IAAI,IAAI;IAIZ,kBAAkB,IAAI,MAAM;CAG7B"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DownloadProgress = void 0;
7
- const cli_progress_1 = __importDefault(require("cli-progress"));
8
- class DownloadProgress {
9
- constructor() {
10
- this.totalBytes = 0;
11
- this.downloadedBytes = 0;
12
- this.startTime = Date.now();
13
- this.bar = new cli_progress_1.default.SingleBar({
14
- format: '[{bar}] {percentage}% | {speed} | ETA: {eta} | {downloaded}',
15
- barCompleteChar: '\u2588',
16
- barIncompleteChar: '\u2591',
17
- hideCursor: true,
18
- fps: 10,
19
- etaAsynchronous: true
20
- });
21
- }
22
- start(total) {
23
- this.totalBytes = total;
24
- this.bar.start(total, 0, {
25
- speed: '0 B/s',
26
- downloaded: '0 MB'
27
- });
28
- }
29
- update(downloaded, total) {
30
- this.downloadedBytes = downloaded;
31
- this.totalBytes = total || this.totalBytes;
32
- const speed = this.calculateSpeed();
33
- const eta = this.calculateETA();
34
- const downloadedMB = (this.downloadedBytes / (1024 * 1024)).toFixed(2);
35
- this.bar.update(this.downloadedBytes, {
36
- speed,
37
- downloaded: `${downloadedMB} MB`,
38
- eta
39
- });
40
- }
41
- calculateSpeed() {
42
- const elapsed = (Date.now() - this.startTime) / 1000;
43
- const bytesPerSecond = elapsed > 0 ? this.downloadedBytes / elapsed : 0;
44
- return this.formatBytes(bytesPerSecond) + '/s';
45
- }
46
- calculateETA() {
47
- const elapsed = (Date.now() - this.startTime) / 1000;
48
- if (this.downloadedBytes === 0 || this.totalBytes === 0)
49
- return 'N/A';
50
- const speed = this.downloadedBytes / elapsed;
51
- const remaining = this.totalBytes - this.downloadedBytes;
52
- const seconds = remaining / speed;
53
- if (seconds < 60)
54
- return `${Math.round(seconds)}s`;
55
- if (seconds < 3600)
56
- return `${Math.floor(seconds / 60)}m ${Math.round(seconds % 60)}s`;
57
- return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
58
- }
59
- formatBytes(bytes) {
60
- if (bytes < 1024)
61
- return bytes + ' B';
62
- if (bytes < 1024 * 1024)
63
- return (bytes / 1024).toFixed(2) + ' KB';
64
- if (bytes < 1024 * 1024 * 1024)
65
- return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
66
- return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
67
- }
68
- stop() {
69
- this.bar.stop();
70
- }
71
- getTotalDownloaded() {
72
- return this.downloadedBytes;
73
- }
74
- }
75
- exports.DownloadProgress = DownloadProgress;
76
- //# sourceMappingURL=progress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { TorrentResult } from '../types';
2
- export declare function displayResults(results: TorrentResult[]): void;
3
- export declare function displayResultDetails(result: TorrentResult): void;
4
- export declare function displayError(message: string): void;
5
- export declare function displaySuccess(message: string): void;
6
- export declare function displayInfo(message: string): void;
7
- //# sourceMappingURL=display.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CA6B7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -1,59 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.displayResults = displayResults;
7
- exports.displayResultDetails = displayResultDetails;
8
- exports.displayError = displayError;
9
- exports.displaySuccess = displaySuccess;
10
- exports.displayInfo = displayInfo;
11
- const chalk_1 = __importDefault(require("chalk"));
12
- function displayResults(results) {
13
- if (results.length === 0) {
14
- console.log(chalk_1.default.yellow('No results found.'));
15
- return;
16
- }
17
- const out = (s) => process.stdout.write(s + '\n');
18
- out('\n' + [
19
- '┌─────┬────────────────────────────────────────┬────────┬───────┬───────┬────────┐',
20
- '│ Num │ Name │ Size │ Seeds │ Leech │ Source │',
21
- '├─────┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤'
22
- ].join('\n'));
23
- for (const r of results) {
24
- const name = r.name.length > 38 ? r.name.substring(0, 35) + '...' : r.name;
25
- const size = r.size ? r.size.slice(0, 6).padEnd(6) : 'N/A ';
26
- const seeds = r.seeds.toString().padStart(5);
27
- const peers = r.peers.toString().padStart(5);
28
- const source = (r.source || 'unknown').slice(0, 6).padEnd(6);
29
- const num = r.num.toString().padStart(3);
30
- out(`│ ${num} │ ${name.padEnd(38)} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
31
- }
32
- out('├─────┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤');
33
- out('└─────┴────────────────────────────────────────┴────────┴───────┴───────┴────────┘');
34
- out('');
35
- out('To download: tor-dl <number>');
36
- }
37
- function displayResultDetails(result) {
38
- console.log(chalk_1.default.bold('\n--- Torrent Details ---'));
39
- console.log(chalk_1.default.white('Name: ') + result.name);
40
- console.log(chalk_1.default.white('Size: ') + result.size);
41
- console.log(chalk_1.default.white('Seeds: ') + chalk_1.default.green(result.seeds.toString()));
42
- console.log(chalk_1.default.white('Peers: ') + result.peers.toString());
43
- console.log(chalk_1.default.white('Source: ') + result.source);
44
- console.log(chalk_1.default.white('URL: ') + result.url);
45
- if (result.magnet) {
46
- console.log(chalk_1.default.white('Magnet: ') + chalk_1.default.cyan(result.magnet.substring(0, 60) + '...'));
47
- }
48
- console.log(chalk_1.default.bold('----------------------\n'));
49
- }
50
- function displayError(message) {
51
- console.error(chalk_1.default.red('Error: ') + message);
52
- }
53
- function displaySuccess(message) {
54
- console.log(chalk_1.default.green('✓ ') + message);
55
- }
56
- function displayInfo(message) {
57
- console.log(chalk_1.default.blue('ℹ ') + message);
58
- }
59
- //# sourceMappingURL=display.js.map