UNPKG

ytdlp-nodejs

Version:

A TypeScript wrapper for the yt-dlp executable

3 lines (2 loc) 2.65 kB
"use strict";var k=Object.create;var w=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var D=(o,t,r,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of E(t))!A.call(o,n)&&n!==r&&w(o,n,{get:()=>t[n],enumerable:!(e=R(t,n))||e.enumerable});return o};var d=(o,t,r)=>(r=o!=null?k(C(o)):{},D(t||!o||!o.__esModule?w(r,"default",{value:o,enumerable:!0}):r,o));var c=d(require("fs")),g=d(require("path"));var N=d(require("https")),O=d(require("http")),m=require("url"),a=d(require("fs"));function y(o,t={}){return new Promise((r,e)=>{let s=(new m.URL(o).protocol==="https:"?N:O).get(o,t,i=>{if(i.statusCode>=300&&i.statusCode<400&&i.headers.location){let p=new m.URL(i.headers.location,o).toString();y(p,t).then(r).catch(e);return}r(i)});s.on("error",e),s.setTimeout(3e4,()=>{s.destroy(),e(new Error("Request timed out"))})})}async function x(o,t){try{let r=a.createWriteStream(t),e=await y(o);if(e.statusCode!==200)throw r.close(),a.unlinkSync(t),new Error(`Failed to download file: ${e.statusCode} ${e.statusMessage}`);let n=parseInt(e.headers["content-length"]||"0",10),f=0;return e.on("data",s=>{f+=s.length;let i=f/n*100;process.stdout.write(`Progress: ${Math.round(i)}%\r`)}),e.pipe(r),new Promise((s,i)=>{r.on("finish",()=>{r.close(),console.log(` Download complete!`),s()}),r.on("error",p=>{r.close(),a.unlinkSync(t),i(p)}),e.on("error",p=>{r.close(),a.unlinkSync(t),i(p)})})}catch(r){throw a.existsSync(t)&&a.unlinkSync(t),r}}var S=d(require("fs")),l=d(require("path"));function b(o){let t=o;for(;;){if(S.existsSync(l.join(t,"package.json")))return t;let r=l.dirname(t);if(r===t)return o;t=r}}var P=b(__dirname),_=l.join(P,"bin"),T=l.join(P,"package.json");var F="https://github.com/yt-dlp/yt-dlp/releases/latest/download",u={win32:{x64:"yt-dlp.exe",ia32:"yt-dlp_x86.exe"},linux:{x64:"yt-dlp",armv7l:"yt-dlp_linux_armv7l",aarch64:"yt-dlp_linux_aarch64",arm64:"yt-dlp"},darwin:{x64:"yt-dlp_macos",arm64:"yt-dlp_macos"},android:{arm64:"yt-dlp"}};function I(){let o=process.platform,t=process.arch;if(!u[o]||!u[o][t])throw new Error(`No yt-dlp build available for ${o} ${t}`);return u[o][t]}async function $(o){let t=o||_,r=I(),e=`${F}/${r}`,n=g.join(t,r);if(c.existsSync(n))return n;console.log("Downloading yt-dlp...",e),c.existsSync(t)||c.mkdirSync(t,{recursive:!0});try{return await x(e,n),console.log(`yt-dlp downloaded successfully to: ${n}`),process.platform!=="win32"&&c.chmodSync(n,493),n}catch(s){throw console.error(`Download failed: ${s}`),s}}$().catch(o=>{console.error("Failed to download yt-dlp:",o),process.exit(1)});