1 line
13 KiB
Plaintext
1 line
13 KiB
Plaintext
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.1.0_postcss@8.4.38_ts-node@10.9.2_@types+node@20.14.2_typescript@5.4.5__typescript@5.4.5/node_modules/tsup/assets/esm_shims.js","../src/wrapper.ts","../src/env.ts","../src/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import dargs from \"dargs\";\nimport fs from \"node:fs/promises\";\nimport { type SpawnOptionsWithoutStdio, spawn } from \"node:child_process\";\nimport { type Dispatcher, request } from \"undici\";\nimport { YTDLP_DIR, YTDLP_IS_WINDOWS, YTDLP_PATH, YTDLP_URL } from \"./env\";\nimport type { YtDlpFlags, YtDlpResponse } from \"./type\";\n\nconst makeRequest = async (url: string): Promise<Dispatcher.ResponseData> => {\n const response = await request(url, { headers: { \"user-agent\": \"distube\" } });\n if (!response.statusCode) throw new Error(`Cannot make requests to '${url}'`);\n if (response.statusCode.toString().startsWith(\"3\")) {\n if (!response.headers.location || Array.isArray(response.headers.location)) {\n throw new Error(`Cannot redirect to '${url}'`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _chunk of response.body) {\n // force consumption of body\n }\n return makeRequest(response.headers.location);\n }\n if (response.statusCode.toString().startsWith(\"2\")) return response;\n throw new Error(`${url}\\nStatus code ${response.statusCode.toString()}`);\n};\n\nconst args = (url: string, flags = {}) => [url].concat(dargs(flags, { useEquals: false })).filter(Boolean);\n\nexport const json = (url: string, flags?: YtDlpFlags, options?: SpawnOptionsWithoutStdio): Promise<YtDlpResponse> => {\n const process = spawn(YTDLP_PATH, args(url, flags), options);\n return new Promise((resolve, reject) => {\n let output = \"\";\n process.stdout?.on(\"data\", chunk => {\n output += chunk;\n });\n process.stderr?.on(\"data\", chunk => {\n output += chunk;\n });\n process.on(\"close\", code => {\n if (code === 0) resolve(JSON.parse(output));\n else reject(new Error(output));\n });\n process.on(\"error\", reject);\n });\n};\n\nconst binContentTypes = [\"binary/octet-stream\", \"application/octet-stream\", \"application/x-binary\"];\nconst getBinary = async (url?: string) => {\n let version = \"N/A\";\n if (!url) {\n const defaultFilename = `yt-dlp${YTDLP_IS_WINDOWS ? \".exe\" : \"\"}`;\n const defaultUrl = `https://github.com/yt-dlp/yt-dlp/releases/latest/download/${defaultFilename}`;\n try {\n const response = await makeRequest(\"https://api.github.com/repos/yt-dlp/yt-dlp/releases?per_page=1\");\n const [{ assets, tag_name }] = <any>await response.body.json();\n const { browser_download_url } = assets.find(\n ({ name }: { name: string }) => name === `yt-dlp${YTDLP_IS_WINDOWS ? \".exe\" : \"\"}`,\n );\n version = typeof tag_name === \"string\" ? tag_name : \"latest\";\n url = typeof browser_download_url === \"string\" ? browser_download_url : defaultUrl;\n } catch {\n version = \"latest\";\n url = defaultUrl;\n }\n }\n\n const response = await makeRequest(url);\n const contentType = response.headers[\"content-type\"]?.toString();\n\n if (binContentTypes.includes(contentType ?? \"\")) return { buffer: await response.body.arrayBuffer(), version };\n\n throw new Error(`Unsupported content type: ${contentType}`);\n};\n\nexport const download = () =>\n Promise.all([getBinary(YTDLP_URL), fs.mkdir(YTDLP_DIR, { recursive: true }).catch(() => undefined)]).then(\n ([{ buffer, version }]) => {\n fs.writeFile(YTDLP_PATH, Buffer.from(buffer), { mode: 493 });\n return version;\n },\n );\n","import path from \"path\";\n\nconst e = (key: string) => process.env[key];\n\nexport const YTDLP_DISABLE_DOWNLOAD = !!e(\"YTDLP_DISABLE_DOWNLOAD\");\nexport const YTDLP_URL = e(\"YTDLP_URL\");\nexport const YTDLP_IS_WINDOWS = e(\"YTDLP_IS_WINDOWS\") || process.platform === \"win32\";\nexport const YTDLP_DIR = e(\"YTDLP_DIR\") || path.join(__dirname, \"..\", \"bin\");\nexport const YTDLP_FILENAME = e(\"YTDLP_FILENAME\") || `yt-dlp${YTDLP_IS_WINDOWS ? \".exe\" : \"\"}`;\nexport const YTDLP_PATH = path.join(YTDLP_DIR, YTDLP_FILENAME);\n\nexport default { YTDLP_DIR, YTDLP_FILENAME, YTDLP_URL, YTDLP_PATH, YTDLP_IS_WINDOWS, YTDLP_DISABLE_DOWNLOAD };\n","import { download, json } from \"./wrapper\";\nimport { DisTubeError, PlayableExtractorPlugin, Playlist, Song } from \"distube\";\nimport type { DisTube, ResolveOptions } from \"distube\";\nimport type { YtDlpOptions, YtDlpPlaylist, YtDlpVideo } from \"./type\";\n\nconst isPlaylist = (i: any): i is YtDlpPlaylist => Array.isArray(i.entries);\n\nexport class YtDlpPlugin extends PlayableExtractorPlugin {\n constructor({ update }: YtDlpOptions = {}) {\n super();\n if (update ?? true) download().catch(() => undefined);\n }\n\n override init(distube: DisTube) {\n super.init(distube);\n if (this.distube.plugins[this.distube.plugins.length - 1] !== this) {\n // eslint-disable-next-line no-console\n console.warn(\n `[${this.constructor.name}] This plugin is not the last plugin in distube. This is not recommended.`,\n );\n }\n }\n\n validate() {\n return true;\n }\n\n async resolve<T>(url: string, options: ResolveOptions<T>) {\n const info = await json(url, {\n dumpSingleJson: true,\n noWarnings: true,\n noCallHome: true,\n preferFreeFormats: true,\n skipDownload: true,\n simulate: true,\n }).catch(e => {\n throw new DisTubeError(\"YTDLP_ERROR\", `${e.stderr || e}`);\n });\n if (isPlaylist(info)) {\n if (info.entries.length === 0) throw new DisTubeError(\"YTDLP_ERROR\", \"The playlist is empty\");\n return new Playlist(\n {\n source: info.extractor,\n songs: info.entries.map(i => new YtDlpSong(this, i, options)),\n id: info.id.toString(),\n name: info.title,\n url: info.webpage_url,\n thumbnail: info.thumbnails?.[0]?.url,\n },\n options,\n );\n }\n return new YtDlpSong(this, info, options);\n }\n\n async getStreamURL(song: Song) {\n if (!song.url) {\n throw new DisTubeError(\"YTDLP_PLUGIN_INVALID_SONG\", \"Cannot get stream url from invalid song.\");\n }\n const info = await json(song.url, {\n dumpSingleJson: true,\n noWarnings: true,\n noCallHome: true,\n preferFreeFormats: true,\n skipDownload: true,\n simulate: true,\n format: \"ba/ba*\",\n }).catch(e => {\n throw new DisTubeError(\"YTDLP_ERROR\", `${e.stderr || e}`);\n });\n if (isPlaylist(info)) throw new DisTubeError(\"YTDLP_ERROR\", \"Cannot get stream URL of a entire playlist\");\n return info.url;\n }\n\n getRelatedSongs() {\n return [];\n }\n}\n\nclass YtDlpSong<T> extends Song<T> {\n constructor(plugin: YtDlpPlugin, info: YtDlpVideo, options: ResolveOptions<T> = {}) {\n super(\n {\n plugin,\n source: info.extractor,\n playFromSource: true,\n id: info.id,\n name: info.title || info.fulltitle,\n url: info.webpage_url || info.original_url,\n isLive: info.is_live,\n thumbnail: info.thumbnail || info.thumbnails?.[0]?.url,\n duration: info.is_live ? 0 : info.duration,\n uploader: {\n name: info.uploader,\n url: info.uploader_url,\n },\n views: info.view_count,\n likes: info.like_count,\n dislikes: info.dislike_count,\n reposts: info.repost_count,\n ageRestricted: Boolean(info.age_limit) && info.age_limit >= 18,\n },\n options,\n );\n }\n}\n\nexport * from \"./wrapper\";\n"],"mappings":";;;;AACA,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,IAAM,cAAc,6BAAM,cAAc,YAAY,GAAG,GAAnC;AACpB,IAAM,aAAa,6BAAM,KAAK,QAAQ,YAAY,CAAC,GAAhC;AAEZ,IAAM,YAA4B,2BAAW;;;ACPpD,OAAO,WAAW;AAClB,OAAO,QAAQ;AACf,SAAwC,aAAa;AACrD,SAA0B,eAAe;;;ACHzC,OAAOA,WAAU;AAEjB,IAAM,IAAI,wBAAC,QAAgB,QAAQ,IAAI,GAAG,GAAhC;AAEH,IAAM,yBAAyB,CAAC,CAAC,EAAE,wBAAwB;AAC3D,IAAM,YAAY,EAAE,WAAW;AAC/B,IAAM,mBAAmB,EAAE,kBAAkB,KAAK,QAAQ,aAAa;AACvE,IAAM,YAAY,EAAE,WAAW,KAAKC,MAAK,KAAK,WAAW,MAAM,KAAK;AACpE,IAAM,iBAAiB,EAAE,gBAAgB,KAAK,SAAS,mBAAmB,SAAS,EAAE;AACrF,IAAM,aAAaA,MAAK,KAAK,WAAW,cAAc;;;ADF7D,IAAM,cAAc,8BAAO,QAAkD;AAC3E,QAAM,WAAW,MAAM,QAAQ,KAAK,EAAE,SAAS,EAAE,cAAc,UAAU,EAAE,CAAC;AAC5E,MAAI,CAAC,SAAS,WAAY,OAAM,IAAI,MAAM,4BAA4B,GAAG,GAAG;AAC5E,MAAI,SAAS,WAAW,SAAS,EAAE,WAAW,GAAG,GAAG;AAClD,QAAI,CAAC,SAAS,QAAQ,YAAY,MAAM,QAAQ,SAAS,QAAQ,QAAQ,GAAG;AAC1E,YAAM,IAAI,MAAM,uBAAuB,GAAG,GAAG;AAAA,IAC/C;AAEA,qBAAiB,UAAU,SAAS,MAAM;AAAA,IAE1C;AACA,WAAO,YAAY,SAAS,QAAQ,QAAQ;AAAA,EAC9C;AACA,MAAI,SAAS,WAAW,SAAS,EAAE,WAAW,GAAG,EAAG,QAAO;AAC3D,QAAM,IAAI,MAAM,GAAG,GAAG;AAAA,cAAiB,SAAS,WAAW,SAAS,CAAC,EAAE;AACzE,GAfoB;AAiBpB,IAAM,OAAO,wBAAC,KAAa,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,MAAM,OAAO,EAAE,WAAW,MAAM,CAAC,CAAC,EAAE,OAAO,OAAO,GAA5F;AAEN,IAAM,OAAO,wBAAC,KAAa,OAAoB,YAA+D;AACnH,QAAMC,WAAU,MAAM,YAAY,KAAK,KAAK,KAAK,GAAG,OAAO;AAC3D,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,SAAS;AACb,IAAAA,SAAQ,QAAQ,GAAG,QAAQ,WAAS;AAClC,gBAAU;AAAA,IACZ,CAAC;AACD,IAAAA,SAAQ,QAAQ,GAAG,QAAQ,WAAS;AAClC,gBAAU;AAAA,IACZ,CAAC;AACD,IAAAA,SAAQ,GAAG,SAAS,UAAQ;AAC1B,UAAI,SAAS,EAAG,SAAQ,KAAK,MAAM,MAAM,CAAC;AAAA,UACrC,QAAO,IAAI,MAAM,MAAM,CAAC;AAAA,IAC/B,CAAC;AACD,IAAAA,SAAQ,GAAG,SAAS,MAAM;AAAA,EAC5B,CAAC;AACH,GAhBoB;AAkBpB,IAAM,kBAAkB,CAAC,uBAAuB,4BAA4B,sBAAsB;AAClG,IAAM,YAAY,8BAAO,QAAiB;AACxC,MAAI,UAAU;AACd,MAAI,CAAC,KAAK;AACR,UAAM,kBAAkB,SAAS,mBAAmB,SAAS,EAAE;AAC/D,UAAM,aAAa,6DAA6D,eAAe;AAC/F,QAAI;AACF,YAAMC,YAAW,MAAM,YAAY,gEAAgE;AACnG,YAAM,CAAC,EAAE,QAAQ,SAAS,CAAC,IAAS,MAAMA,UAAS,KAAK,KAAK;AAC7D,YAAM,EAAE,qBAAqB,IAAI,OAAO;AAAA,QACtC,CAAC,EAAE,KAAK,MAAwB,SAAS,SAAS,mBAAmB,SAAS,EAAE;AAAA,MAClF;AACA,gBAAU,OAAO,aAAa,WAAW,WAAW;AACpD,YAAM,OAAO,yBAAyB,WAAW,uBAAuB;AAAA,IAC1E,QAAQ;AACN,gBAAU;AACV,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,YAAY,GAAG;AACtC,QAAM,cAAc,SAAS,QAAQ,cAAc,GAAG,SAAS;AAE/D,MAAI,gBAAgB,SAAS,eAAe,EAAE,EAAG,QAAO,EAAE,QAAQ,MAAM,SAAS,KAAK,YAAY,GAAG,QAAQ;AAE7G,QAAM,IAAI,MAAM,6BAA6B,WAAW,EAAE;AAC5D,GAzBkB;AA2BX,IAAM,WAAW,6BACtB,QAAQ,IAAI,CAAC,UAAU,SAAS,GAAG,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC,EAAE,MAAM,MAAM,MAAS,CAAC,CAAC,EAAE;AAAA,EACnG,CAAC,CAAC,EAAE,QAAQ,QAAQ,CAAC,MAAM;AACzB,OAAG,UAAU,YAAY,OAAO,KAAK,MAAM,GAAG,EAAE,MAAM,IAAI,CAAC;AAC3D,WAAO;AAAA,EACT;AACF,GANsB;;;AEvExB,SAAS,cAAc,yBAAyB,UAAU,YAAY;AAItE,IAAM,aAAa,wBAAC,MAA+B,MAAM,QAAQ,EAAE,OAAO,GAAvD;AAEZ,IAAM,cAAN,cAA0B,wBAAwB;AAAA,EAPzD,OAOyD;AAAA;AAAA;AAAA,EACvD,YAAY,EAAE,OAAO,IAAkB,CAAC,GAAG;AACzC,UAAM;AACN,QAAI,UAAU,KAAM,UAAS,EAAE,MAAM,MAAM,MAAS;AAAA,EACtD;AAAA,EAES,KAAK,SAAkB;AAC9B,UAAM,KAAK,OAAO;AAClB,QAAI,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,SAAS,CAAC,MAAM,MAAM;AAElE,cAAQ;AAAA,QACN,IAAI,KAAK,YAAY,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AACT,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAW,KAAa,SAA4B;AACxD,UAAM,OAAO,MAAM,KAAK,KAAK;AAAA,MAC3B,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,UAAU;AAAA,IACZ,CAAC,EAAE,MAAM,CAAAC,OAAK;AACZ,YAAM,IAAI,aAAa,eAAe,GAAGA,GAAE,UAAUA,EAAC,EAAE;AAAA,IAC1D,CAAC;AACD,QAAI,WAAW,IAAI,GAAG;AACpB,UAAI,KAAK,QAAQ,WAAW,EAAG,OAAM,IAAI,aAAa,eAAe,uBAAuB;AAC5F,aAAO,IAAI;AAAA,QACT;AAAA,UACE,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK,QAAQ,IAAI,OAAK,IAAI,UAAU,MAAM,GAAG,OAAO,CAAC;AAAA,UAC5D,IAAI,KAAK,GAAG,SAAS;AAAA,UACrB,MAAM,KAAK;AAAA,UACX,KAAK,KAAK;AAAA,UACV,WAAW,KAAK,aAAa,CAAC,GAAG;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,IAAI,UAAU,MAAM,MAAM,OAAO;AAAA,EAC1C;AAAA,EAEA,MAAM,aAAa,MAAY;AAC7B,QAAI,CAAC,KAAK,KAAK;AACb,YAAM,IAAI,aAAa,6BAA6B,0CAA0C;AAAA,IAChG;AACA,UAAM,OAAO,MAAM,KAAK,KAAK,KAAK;AAAA,MAChC,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,CAAC,EAAE,MAAM,CAAAA,OAAK;AACZ,YAAM,IAAI,aAAa,eAAe,GAAGA,GAAE,UAAUA,EAAC,EAAE;AAAA,IAC1D,CAAC;AACD,QAAI,WAAW,IAAI,EAAG,OAAM,IAAI,aAAa,eAAe,4CAA4C;AACxG,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAkB;AAChB,WAAO,CAAC;AAAA,EACV;AACF;AAEA,IAAM,YAAN,cAA2B,KAAQ;AAAA,EA/EnC,OA+EmC;AAAA;AAAA;AAAA,EACjC,YAAY,QAAqB,MAAkB,UAA6B,CAAC,GAAG;AAClF;AAAA,MACE;AAAA,QACE;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,gBAAgB;AAAA,QAChB,IAAI,KAAK;AAAA,QACT,MAAM,KAAK,SAAS,KAAK;AAAA,QACzB,KAAK,KAAK,eAAe,KAAK;AAAA,QAC9B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK,aAAa,KAAK,aAAa,CAAC,GAAG;AAAA,QACnD,UAAU,KAAK,UAAU,IAAI,KAAK;AAAA,QAClC,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,KAAK,KAAK;AAAA,QACZ;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,QACf,SAAS,KAAK;AAAA,QACd,eAAe,QAAQ,KAAK,SAAS,KAAK,KAAK,aAAa;AAAA,MAC9D;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":["path","path","process","response","e"]} |