@pieda/video-dl 1.8.0 → 1.9.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/dist/types/composables/useInstagram.d.ts +2 -2
- package/dist/video-dl.cjs +1 -1
- package/dist/video-dl.js +125 -124
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
type TUseInstagram = {
|
|
2
|
+
ytdlpPath: string;
|
|
2
3
|
videoId: string;
|
|
3
4
|
dest: string;
|
|
4
5
|
debug?: boolean;
|
|
5
|
-
headless?: boolean;
|
|
6
6
|
};
|
|
7
|
-
export declare const useInstagram: ({ videoId, dest, debug,
|
|
7
|
+
export declare const useInstagram: ({ ytdlpPath, videoId, dest, debug, }: TUseInstagram) => Promise<[Error | null, boolean | null]>;
|
|
8
8
|
export {};
|
package/dist/video-dl.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=i=>new Promise((r,t)=>{import(i).then(g=>r(g.default)).catch(t)}),f=async(i,r,t)=>{const g=await l("fs"),e=await l("axios");return console.log(`Downloading ${i} to ${r}`),new Promise((w,s)=>{e.get(i,{responseType:"stream",headers:t}).then(u=>{const p=u.data,a=g.createWriteStream(r);p.pipe(a),a.on("finish",function(){a.close(()=>{w()})})}).catch(s)})},d=(i=!1)=>({log:(...r)=>{i&&console.log(...r)},error:(...r)=>{i&&console.error(...r)}}),y=async({ytdlpPath:i,videoId:r,dest:t,debug:g=!1})=>{const e=d(g);e.log(`Downloading video: ${r} to: ${t}`);const w=await l("fs"),s=await l("path"),{exec:u}=await l("child_process"),p=(a="")=>new Promise((c,o)=>{const n=`${i} -f b -g https://www.youtube.com/watch?v=${a}`;e.log(`[yt-dlp] 執行命令: ${n}`),u(n,(m,h,$)=>{if(e.log(`[yt-dlp] stdout: ${h}`),!h.includes("https://")){c("");return}c(h)})});return w.existsSync(s.dirname(t))||(w.mkdirSync(s.dirname(t),{recursive:!0},777),e.log(`建立 ${s.dirname(t)}`)),new Promise(async(a,c)=>{try{const o=await p(r);if(!o)throw new Error("無法取得 videoUrl");e.log(`取得 videoUrl ${o}`),await f(o,t).catch(n=>{throw e.error(`下載失敗: ${n.message}`),n}),e.log(`下載完成 ${t}`),a([null,!0])}catch(o){e.error(`下載失敗: ${o.message}`),a([o,null])}})},k=async({videoId:i,dest:r,debug:t=!1,headless:g=!0})=>{try{const e=d(t);e.log(`Downloading video: ${i} to: ${r}`);const w=`https://m.facebook.com/watch/?v=${i}`,s=await l("fs"),u=await l("path"),p=await l("puppeteer");s.existsSync(u.dirname(r))||(s.mkdirSync(u.dirname(r),{recursive:!0},777),e.log(`建立 ${u.dirname(r)}`));const a={};g||(a.headless=!1);const c=await p.launch(a);e.log("啟動 puppeteer");const o=await c.newPage();await o.setUserAgent("'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'"),e.log("開新分頁"),e.log(`前往 ${w}`),await Promise.race([o.goto(w,{waitUntil:"networkidle0"}),o.waitForSelector("video")]),e.log("找到 video 元素");const n=await o.$eval("video",m=>m.getAttribute("src"));return e.log(`取得 video url: ${n}`),await c.close(),e.log("關閉 puppeteer"),await f(n,r),e.log(`下載完成 ${n}`),[null,!0]}catch(e){return[e,null]}},v=async({ytdlpPath:i,videoId:r,dest:t,debug:g=!1})=>{const e=d(g);e.log(`Downloading video: ${r} to: ${t}`);const w=await l("fs"),s=await l("path"),{exec:u}=await l("child_process"),p=(a="")=>new Promise((c,o)=>{const n=`${i} -f b -g https://vimeo.com/${a}`;console.log(`執行命令: ${n}`),u(n,(m,h,$)=>{if(e.log(`yt-dlp stdout: ${h}`),!h.includes("https://")){c("");return}c(h)})});return w.existsSync(s.dirname(t))||(w.mkdirSync(s.dirname(t),{recursive:!0},777),e.log(`建立 ${s.dirname(t)}`)),new Promise(async(a,c)=>{try{const o=await p(r);if(!o)throw new Error("無法取得 videoUrl");e.log(`取得 videoUrl ${o}`),await f(o,t).catch(n=>{throw e.error(`下載失敗: ${n.message}`),n}),e.log(`下載完成 ${t}`),a([null,!0])}catch(o){e.error(`下載失敗: ${o.message}`),a([o,null])}})},b=async({ytdlpPath:i,videoId:r,dest:t,debug:g=!1})=>{const e=d(g);e.log(`Downloading video: ${r} to: ${t}`);const w=await l("fs"),s=await l("path"),{exec:u}=await l("child_process"),p=(a="")=>new Promise((c,o)=>{const n=`https://www.instagram.com/reel/${a}/`,m=`${i} -f b -g ${n}`;console.log(`執行命令: ${m}`),u(m,(h,$,P)=>{if(e.log(`yt-dlp stdout: ${$}`),!$.includes("https://")){c("");return}c($)})});return w.existsSync(s.dirname(t))||(w.mkdirSync(s.dirname(t),{recursive:!0},777),e.log(`建立 ${s.dirname(t)}`)),new Promise(async(a,c)=>{try{const o=await p(r);if(!o)throw new Error("無法取得 videoUrl");e.log(`取得 videoUrl ${o}`),await f(o,t).catch(n=>{throw e.error(`下載失敗: ${n.message}`),n}),e.log(`下載完成 ${t}`),a([null,!0])}catch(o){e.error(`下載失敗: ${o.message}`),a([o,null])}})},S=async({videoLink:i,dest:r,debug:t=!1,headless:g=!0})=>{try{const e=d(t);e.log(`Downloading video: ${i} to: ${r}`);const w=i,s=await l("fs"),u=await l("path"),p=await l("puppeteer");s.existsSync(u.dirname(r))||(s.mkdirSync(u.dirname(r),{recursive:!0},777),e.log(`建立 ${u.dirname(r)}`));const a={};g||(a.headless=!1);const c=await p.launch(a);e.log("啟動 puppeteer");const o=await c.newPage();e.log("開新分頁"),e.log(`前往 ${w}`),await Promise.race([o.goto(w,{waitUntil:"networkidle0"}),o.waitForSelector("video")]),e.log("找到 video 元素");const n=await o.$eval('video source[src^="https://www.tiktok.com/aweme/v1/play/"]',m=>m.getAttribute("src"));return e.log(`取得 video url: ${n}`),await c.close(),e.log("關閉 puppeteer"),await f(n,r,{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",Referer:"https://www.tiktok.com/"}),e.log(`下載完成 ${n}`),[null,!0]}catch(e){return[e,null]}},U=({type:i})=>{switch(i){case"youtube":case"yt-short":return y;case"facebook":case"fb-reel":return k;case"vimeo":return v;case"instagram":case"ig":case"ig-reel":return b;case"tiktok":case"tiktok-reel":return S;default:throw new Error(`Invalid video type: ${i}`)}};exports.useDownloader=U;exports.useFacebook=k;exports.useInstagram=b;exports.useTiktok=S;exports.useVimeo=v;exports.useYoutube=y;
|
package/dist/video-dl.js
CHANGED
|
@@ -1,205 +1,206 @@
|
|
|
1
|
-
const l = (
|
|
2
|
-
import(
|
|
3
|
-
}), f = async (
|
|
1
|
+
const l = (i) => new Promise((r, t) => {
|
|
2
|
+
import(i).then((u) => r(u.default)).catch(t);
|
|
3
|
+
}), f = async (i, r, t) => {
|
|
4
4
|
const u = await l("fs"), e = await l("axios");
|
|
5
|
-
return console.log(`Downloading ${
|
|
6
|
-
e.get(
|
|
5
|
+
return console.log(`Downloading ${i} to ${r}`), new Promise((w, c) => {
|
|
6
|
+
e.get(i, {
|
|
7
7
|
responseType: "stream",
|
|
8
|
-
headers:
|
|
9
|
-
}).then((
|
|
10
|
-
const p =
|
|
11
|
-
p.pipe(
|
|
12
|
-
|
|
8
|
+
headers: t
|
|
9
|
+
}).then((g) => {
|
|
10
|
+
const p = g.data, a = u.createWriteStream(r);
|
|
11
|
+
p.pipe(a), a.on("finish", function() {
|
|
12
|
+
a.close(() => {
|
|
13
13
|
w();
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
16
|
}).catch(c);
|
|
17
17
|
});
|
|
18
|
-
},
|
|
19
|
-
log: (...
|
|
20
|
-
|
|
18
|
+
}, d = (i = !1) => ({
|
|
19
|
+
log: (...r) => {
|
|
20
|
+
i && console.log(...r);
|
|
21
21
|
},
|
|
22
|
-
error: (...
|
|
23
|
-
|
|
22
|
+
error: (...r) => {
|
|
23
|
+
i && console.error(...r);
|
|
24
24
|
}
|
|
25
|
-
}),
|
|
26
|
-
ytdlpPath:
|
|
27
|
-
videoId:
|
|
28
|
-
dest:
|
|
25
|
+
}), y = async ({
|
|
26
|
+
ytdlpPath: i,
|
|
27
|
+
videoId: r,
|
|
28
|
+
dest: t,
|
|
29
29
|
debug: u = !1
|
|
30
30
|
}) => {
|
|
31
|
-
const e =
|
|
32
|
-
e.log(`Downloading video: ${
|
|
33
|
-
const w = await l("fs"), c = await l("path"), { exec:
|
|
34
|
-
const
|
|
35
|
-
e.log(`[yt-dlp] 執行命令: ${
|
|
31
|
+
const e = d(u);
|
|
32
|
+
e.log(`Downloading video: ${r} to: ${t}`);
|
|
33
|
+
const w = await l("fs"), c = await l("path"), { exec: g } = await l("child_process"), p = (a = "") => new Promise((s, o) => {
|
|
34
|
+
const n = `${i} -f b -g https://www.youtube.com/watch?v=${a}`;
|
|
35
|
+
e.log(`[yt-dlp] 執行命令: ${n}`), g(n, (m, h, $) => {
|
|
36
36
|
if (e.log(`[yt-dlp] stdout: ${h}`), !h.includes("https://")) {
|
|
37
|
-
|
|
37
|
+
s("");
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
s(h);
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
|
-
return w.existsSync(c.dirname(
|
|
43
|
+
return w.existsSync(c.dirname(t)) || (w.mkdirSync(c.dirname(t), { recursive: !0 }, 777), e.log(`建立 ${c.dirname(t)}`)), new Promise(async (a, s) => {
|
|
44
44
|
try {
|
|
45
|
-
const
|
|
46
|
-
if (!
|
|
45
|
+
const o = await p(r);
|
|
46
|
+
if (!o)
|
|
47
47
|
throw new Error("無法取得 videoUrl");
|
|
48
|
-
e.log(`取得 videoUrl ${
|
|
49
|
-
throw e.error(`下載失敗: ${
|
|
50
|
-
}), e.log(`下載完成 ${
|
|
51
|
-
} catch (
|
|
52
|
-
e.error(`下載失敗: ${
|
|
48
|
+
e.log(`取得 videoUrl ${o}`), await f(o, t).catch((n) => {
|
|
49
|
+
throw e.error(`下載失敗: ${n.message}`), n;
|
|
50
|
+
}), e.log(`下載完成 ${t}`), a([null, !0]);
|
|
51
|
+
} catch (o) {
|
|
52
|
+
e.error(`下載失敗: ${o.message}`), a([o, null]);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
|
-
},
|
|
56
|
-
videoId:
|
|
57
|
-
dest:
|
|
58
|
-
debug:
|
|
55
|
+
}, k = async ({
|
|
56
|
+
videoId: i,
|
|
57
|
+
dest: r,
|
|
58
|
+
debug: t = !1,
|
|
59
59
|
headless: u = !0
|
|
60
60
|
}) => {
|
|
61
61
|
try {
|
|
62
|
-
const e =
|
|
63
|
-
e.log(`Downloading video: ${
|
|
64
|
-
const w = `https://m.facebook.com/watch/?v=${
|
|
65
|
-
c.existsSync(
|
|
66
|
-
const
|
|
67
|
-
u || (
|
|
68
|
-
const
|
|
62
|
+
const e = d(t);
|
|
63
|
+
e.log(`Downloading video: ${i} to: ${r}`);
|
|
64
|
+
const w = `https://m.facebook.com/watch/?v=${i}`, c = await l("fs"), g = await l("path"), p = await l("puppeteer");
|
|
65
|
+
c.existsSync(g.dirname(r)) || (c.mkdirSync(g.dirname(r), { recursive: !0 }, 777), e.log(`建立 ${g.dirname(r)}`));
|
|
66
|
+
const a = {};
|
|
67
|
+
u || (a.headless = !1);
|
|
68
|
+
const s = await p.launch(a);
|
|
69
69
|
e.log("啟動 puppeteer");
|
|
70
|
-
const
|
|
71
|
-
await
|
|
70
|
+
const o = await s.newPage();
|
|
71
|
+
await o.setUserAgent(
|
|
72
72
|
"'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'"
|
|
73
73
|
), e.log("開新分頁"), e.log(`前往 ${w}`), await Promise.race([
|
|
74
|
-
|
|
74
|
+
o.goto(w, {
|
|
75
75
|
waitUntil: "networkidle0"
|
|
76
76
|
}),
|
|
77
|
-
|
|
77
|
+
o.waitForSelector("video")
|
|
78
78
|
]), e.log("找到 video 元素");
|
|
79
|
-
const
|
|
80
|
-
return e.log(`取得 video url: ${
|
|
79
|
+
const n = await o.$eval("video", (m) => m.getAttribute("src"));
|
|
80
|
+
return e.log(`取得 video url: ${n}`), await s.close(), e.log("關閉 puppeteer"), await f(n, r), e.log(`下載完成 ${n}`), [null, !0];
|
|
81
81
|
} catch (e) {
|
|
82
82
|
return [e, null];
|
|
83
83
|
}
|
|
84
|
-
},
|
|
85
|
-
ytdlpPath:
|
|
86
|
-
videoId:
|
|
87
|
-
dest:
|
|
84
|
+
}, v = async ({
|
|
85
|
+
ytdlpPath: i,
|
|
86
|
+
videoId: r,
|
|
87
|
+
dest: t,
|
|
88
88
|
debug: u = !1
|
|
89
89
|
}) => {
|
|
90
|
-
const e =
|
|
91
|
-
e.log(`Downloading video: ${
|
|
92
|
-
const w = await l("fs"), c = await l("path"), { exec:
|
|
93
|
-
const
|
|
94
|
-
console.log(`執行命令: ${
|
|
90
|
+
const e = d(u);
|
|
91
|
+
e.log(`Downloading video: ${r} to: ${t}`);
|
|
92
|
+
const w = await l("fs"), c = await l("path"), { exec: g } = await l("child_process"), p = (a = "") => new Promise((s, o) => {
|
|
93
|
+
const n = `${i} -f b -g https://vimeo.com/${a}`;
|
|
94
|
+
console.log(`執行命令: ${n}`), g(n, (m, h, $) => {
|
|
95
95
|
if (e.log(`yt-dlp stdout: ${h}`), !h.includes("https://")) {
|
|
96
|
-
|
|
96
|
+
s("");
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
|
-
|
|
99
|
+
s(h);
|
|
100
100
|
});
|
|
101
101
|
});
|
|
102
|
-
return w.existsSync(c.dirname(
|
|
102
|
+
return w.existsSync(c.dirname(t)) || (w.mkdirSync(c.dirname(t), { recursive: !0 }, 777), e.log(`建立 ${c.dirname(t)}`)), new Promise(async (a, s) => {
|
|
103
103
|
try {
|
|
104
|
-
const
|
|
105
|
-
if (!
|
|
104
|
+
const o = await p(r);
|
|
105
|
+
if (!o)
|
|
106
106
|
throw new Error("無法取得 videoUrl");
|
|
107
|
-
e.log(`取得 videoUrl ${
|
|
108
|
-
throw e.error(`下載失敗: ${
|
|
109
|
-
}), e.log(`下載完成 ${
|
|
110
|
-
} catch (
|
|
111
|
-
e.error(`下載失敗: ${
|
|
107
|
+
e.log(`取得 videoUrl ${o}`), await f(o, t).catch((n) => {
|
|
108
|
+
throw e.error(`下載失敗: ${n.message}`), n;
|
|
109
|
+
}), e.log(`下載完成 ${t}`), a([null, !0]);
|
|
110
|
+
} catch (o) {
|
|
111
|
+
e.error(`下載失敗: ${o.message}`), a([o, null]);
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
}, S = async ({
|
|
115
|
+
ytdlpPath: i,
|
|
115
116
|
videoId: r,
|
|
116
|
-
dest:
|
|
117
|
-
debug:
|
|
118
|
-
headless: u = !0
|
|
117
|
+
dest: t,
|
|
118
|
+
debug: u = !1
|
|
119
119
|
}) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
120
|
+
const e = d(u);
|
|
121
|
+
e.log(`Downloading video: ${r} to: ${t}`);
|
|
122
|
+
const w = await l("fs"), c = await l("path"), { exec: g } = await l("child_process"), p = (a = "") => new Promise((s, o) => {
|
|
123
|
+
const n = `https://www.instagram.com/reel/${a}/`, m = `${i} -f b -g ${n}`;
|
|
124
|
+
console.log(`執行命令: ${m}`), g(m, (h, $, b) => {
|
|
125
|
+
if (e.log(`yt-dlp stdout: ${$}`), !$.includes("https://")) {
|
|
126
|
+
s("");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
s($);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
return w.existsSync(c.dirname(t)) || (w.mkdirSync(c.dirname(t), { recursive: !0 }, 777), e.log(`建立 ${c.dirname(t)}`)), new Promise(async (a, s) => {
|
|
133
|
+
try {
|
|
134
|
+
const o = await p(r);
|
|
135
|
+
if (!o)
|
|
136
|
+
throw new Error("無法取得 videoUrl");
|
|
137
|
+
e.log(`取得 videoUrl ${o}`), await f(o, t).catch((n) => {
|
|
138
|
+
throw e.error(`下載失敗: ${n.message}`), n;
|
|
139
|
+
}), e.log(`下載完成 ${t}`), a([null, !0]);
|
|
140
|
+
} catch (o) {
|
|
141
|
+
e.error(`下載失敗: ${o.message}`), a([o, null]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}, U = async ({
|
|
145
|
+
videoLink: i,
|
|
146
|
+
dest: r,
|
|
147
|
+
debug: t = !1,
|
|
147
148
|
headless: u = !0
|
|
148
149
|
}) => {
|
|
149
150
|
try {
|
|
150
|
-
const e =
|
|
151
|
-
e.log(`Downloading video: ${
|
|
152
|
-
const w =
|
|
153
|
-
c.existsSync(
|
|
154
|
-
const
|
|
155
|
-
u || (
|
|
156
|
-
const
|
|
151
|
+
const e = d(t);
|
|
152
|
+
e.log(`Downloading video: ${i} to: ${r}`);
|
|
153
|
+
const w = i, c = await l("fs"), g = await l("path"), p = await l("puppeteer");
|
|
154
|
+
c.existsSync(g.dirname(r)) || (c.mkdirSync(g.dirname(r), { recursive: !0 }, 777), e.log(`建立 ${g.dirname(r)}`));
|
|
155
|
+
const a = {};
|
|
156
|
+
u || (a.headless = !1);
|
|
157
|
+
const s = await p.launch(a);
|
|
157
158
|
e.log("啟動 puppeteer");
|
|
158
|
-
const
|
|
159
|
+
const o = await s.newPage();
|
|
159
160
|
e.log("開新分頁"), e.log(`前往 ${w}`), await Promise.race([
|
|
160
|
-
|
|
161
|
+
o.goto(w, {
|
|
161
162
|
waitUntil: "networkidle0"
|
|
162
163
|
}),
|
|
163
|
-
|
|
164
|
+
o.waitForSelector("video")
|
|
164
165
|
]), e.log("找到 video 元素");
|
|
165
|
-
const
|
|
166
|
+
const n = await o.$eval(
|
|
166
167
|
'video source[src^="https://www.tiktok.com/aweme/v1/play/"]',
|
|
167
168
|
(m) => m.getAttribute("src")
|
|
168
169
|
);
|
|
169
|
-
return e.log(`取得 video url: ${
|
|
170
|
+
return e.log(`取得 video url: ${n}`), await s.close(), e.log("關閉 puppeteer"), await f(n, r, {
|
|
170
171
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
171
172
|
Referer: "https://www.tiktok.com/"
|
|
172
173
|
// 設定 Referer
|
|
173
|
-
}), e.log(`下載完成 ${
|
|
174
|
+
}), e.log(`下載完成 ${n}`), [null, !0];
|
|
174
175
|
} catch (e) {
|
|
175
176
|
return [e, null];
|
|
176
177
|
}
|
|
177
|
-
}, P = ({ type:
|
|
178
|
-
switch (
|
|
178
|
+
}, P = ({ type: i }) => {
|
|
179
|
+
switch (i) {
|
|
179
180
|
case "youtube":
|
|
180
181
|
case "yt-short":
|
|
181
|
-
return
|
|
182
|
+
return y;
|
|
182
183
|
case "facebook":
|
|
183
184
|
case "fb-reel":
|
|
184
|
-
return y;
|
|
185
|
-
case "vimeo":
|
|
186
185
|
return k;
|
|
186
|
+
case "vimeo":
|
|
187
|
+
return v;
|
|
187
188
|
case "instagram":
|
|
188
189
|
case "ig":
|
|
189
190
|
case "ig-reel":
|
|
190
191
|
return S;
|
|
191
192
|
case "tiktok":
|
|
192
193
|
case "tiktok-reel":
|
|
193
|
-
return
|
|
194
|
+
return U;
|
|
194
195
|
default:
|
|
195
|
-
throw new Error(`Invalid video type: ${
|
|
196
|
+
throw new Error(`Invalid video type: ${i}`);
|
|
196
197
|
}
|
|
197
198
|
};
|
|
198
199
|
export {
|
|
199
200
|
P as useDownloader,
|
|
200
|
-
|
|
201
|
+
k as useFacebook,
|
|
201
202
|
S as useInstagram,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
U as useTiktok,
|
|
204
|
+
v as useVimeo,
|
|
205
|
+
y as useYoutube
|
|
205
206
|
};
|