From c53d4f6e84b53005ce6961520808f6e54dbd29c2 Mon Sep 17 00:00:00 2001 From: Omer Sabic Date: Mon, 10 Jun 2024 00:14:41 +0200 Subject: [PATCH] new captions system --- ... Horizons - Alpha 2.1 [bL_SSA49Trc].en.vtt | 784 ++++++++++++++++++ package-lock.json | 396 ++++++++- package.json | 1 + src/routes/dashboard.js | 54 +- yarn.lock | 187 ++++- 5 files changed, 1359 insertions(+), 63 deletions(-) create mode 100644 Distant Horizons - Alpha 2.1 [bL_SSA49Trc].en.vtt diff --git a/Distant Horizons - Alpha 2.1 [bL_SSA49Trc].en.vtt b/Distant Horizons - Alpha 2.1 [bL_SSA49Trc].en.vtt new file mode 100644 index 0000000..8a28fd0 --- /dev/null +++ b/Distant Horizons - Alpha 2.1 [bL_SSA49Trc].en.vtt @@ -0,0 +1,784 @@ +WEBVTT +Kind: captions +Language: en + +00:00:11.370 --> 00:00:14.669 align:start position:0% + +[Music] + +00:00:14.669 --> 00:00:14.679 align:start position:0% + + + +00:00:14.679 --> 00:00:16.590 align:start position:0% + +I<00:00:14.759> am<00:00:14.960> very<00:00:15.200> happy<00:00:15.440> to<00:00:15.679> say<00:00:16.119> that<00:00:16.279> thanks<00:00:16.440> to + +00:00:16.590 --> 00:00:16.600 align:start position:0% +I am very happy to say that thanks to + + +00:00:16.600 --> 00:00:19.070 align:start position:0% +I am very happy to say that thanks to +the<00:00:16.720> hard<00:00:16.920> work<00:00:17.160> of<00:00:17.400> IMS<00:00:18.039> null<00:00:18.520> and<00:00:18.720> several + +00:00:19.070 --> 00:00:19.080 align:start position:0% +the hard work of IMS null and several + + +00:00:19.080 --> 00:00:21.230 align:start position:0% +the hard work of IMS null and several +other<00:00:19.400> Iris<00:00:19.680> Shader<00:00:20.080> devs<00:00:20.760> our<00:00:20.960> most + +00:00:21.230 --> 00:00:21.240 align:start position:0% +other Iris Shader devs our most + + +00:00:21.240 --> 00:00:22.870 align:start position:0% +other Iris Shader devs our most +requested<00:00:21.680> feature<00:00:22.039> is<00:00:22.199> now<00:00:22.400> finally + +00:00:22.870 --> 00:00:22.880 align:start position:0% +requested feature is now finally + + +00:00:22.880 --> 00:00:26.349 align:start position:0% +requested feature is now finally +available<00:00:23.880> as<00:00:24.039> of<00:00:24.240> Iris<00:00:24.599> 1.7<00:00:25.560> Iris<00:00:25.960> now<00:00:26.160> has + +00:00:26.349 --> 00:00:26.359 align:start position:0% +available as of Iris 1.7 Iris now has + + +00:00:26.359 --> 00:00:29.230 align:start position:0% +available as of Iris 1.7 Iris now has +full<00:00:26.640> DH<00:00:27.240> support<00:00:28.240> this<00:00:28.359> means<00:00:28.640> that<00:00:28.800> shaders + +00:00:29.230 --> 00:00:29.240 align:start position:0% +full DH support this means that shaders + + +00:00:29.240 --> 00:00:31.550 align:start position:0% +full DH support this means that shaders +designed<00:00:29.560> with<00:00:29.720> DH<00:00:30.160> in<00:00:30.279> mind<00:00:30.599> will<00:00:30.759> render<00:00:31.080> LOD + +00:00:31.550 --> 00:00:31.560 align:start position:0% +designed with DH in mind will render LOD + + +00:00:31.560 --> 00:00:33.510 align:start position:0% +designed with DH in mind will render LOD +seamlessly<00:00:32.079> with<00:00:32.239> vanilla + +00:00:33.510 --> 00:00:33.520 align:start position:0% +seamlessly with vanilla + + +00:00:33.520 --> 00:00:36.069 align:start position:0% +seamlessly with vanilla +chunks<00:00:34.520> in<00:00:34.640> order<00:00:34.840> for<00:00:35.040> Iris<00:00:35.360> to<00:00:35.520> add<00:00:35.680> DH + +00:00:36.069 --> 00:00:36.079 align:start position:0% +chunks in order for Iris to add DH + + +00:00:36.079 --> 00:00:38.510 align:start position:0% +chunks in order for Iris to add DH +support<00:00:36.600> the<00:00:36.760> DH<00:00:37.239> API<00:00:37.680> has<00:00:37.800> been<00:00:38.000> updated<00:00:38.360> with + +00:00:38.510 --> 00:00:38.520 align:start position:0% +support the DH API has been updated with + + +00:00:38.520 --> 00:00:41.150 align:start position:0% +support the DH API has been updated with +several<00:00:38.800> new<00:00:38.920> methods<00:00:39.239> and<00:00:39.719> objects<00:00:40.719> however + +00:00:41.150 --> 00:00:41.160 align:start position:0% +several new methods and objects however + + +00:00:41.160 --> 00:00:43.830 align:start position:0% +several new methods and objects however +there<00:00:41.280> were<00:00:41.559> also<00:00:41.960> several<00:00:42.320> breaking<00:00:42.840> changes + +00:00:43.830 --> 00:00:43.840 align:start position:0% +there were also several breaking changes + + +00:00:43.840 --> 00:00:45.590 align:start position:0% +there were also several breaking changes +most<00:00:44.079> of<00:00:44.280> which<00:00:44.399> were<00:00:44.559> due<00:00:44.760> to<00:00:44.879> mistakes<00:00:45.200> on<00:00:45.399> my + +00:00:45.590 --> 00:00:45.600 align:start position:0% +most of which were due to mistakes on my + + +00:00:45.600 --> 00:00:48.630 align:start position:0% +most of which were due to mistakes on my +end<00:00:46.079> due<00:00:46.239> to<00:00:46.399> misnaming<00:00:46.879> a<00:00:47.000> bunch<00:00:47.160> of<00:00:47.640> objects + +00:00:48.630 --> 00:00:48.640 align:start position:0% +end due to misnaming a bunch of objects + + +00:00:48.640 --> 00:00:51.310 align:start position:0% +end due to misnaming a bunch of objects +sorry<00:00:48.960> about<00:00:49.280> that<00:00:50.280> the<00:00:50.399> full<00:00:50.640> list<00:00:50.800> of<00:00:50.960> API + +00:00:51.310 --> 00:00:51.320 align:start position:0% +sorry about that the full list of API + + +00:00:51.320 --> 00:00:53.430 align:start position:0% +sorry about that the full list of API +changes<00:00:51.640> are<00:00:51.800> linked<00:00:52.039> in<00:00:52.160> the<00:00:52.280> description + +00:00:53.430 --> 00:00:53.440 align:start position:0% +changes are linked in the description + + +00:00:53.440 --> 00:00:55.990 align:start position:0% +changes are linked in the description +below<00:00:54.440> along<00:00:54.680> with<00:00:54.879> those<00:00:55.039> two<00:00:55.239> major<00:00:55.520> changes + +00:00:55.990 --> 00:00:56.000 align:start position:0% +below along with those two major changes + + +00:00:56.000 --> 00:00:59.389 align:start position:0% +below along with those two major changes +DH<00:00:56.520> now<00:00:56.680> supports<00:00:57.079> Minecraft<00:00:57.520> versions<00:00:58.399> 1.2.2 + +00:00:59.389 --> 00:00:59.399 align:start position:0% +DH now supports Minecraft versions 1.2.2 + + +00:00:59.399 --> 00:01:03.590 align:start position:0% +DH now supports Minecraft versions 1.2.2 +1<00:01:00.000> 20.4<00:01:00.760> and<00:01:00.960> 1<00:01:01.640> 1206<00:01:02.640> bringing<00:01:02.960> the<00:01:03.199> supported + +00:01:03.590 --> 00:01:03.600 align:start position:0% +1 20.4 and 1 1206 bringing the supported + + +00:01:03.600 --> 00:01:05.789 align:start position:0% +1 20.4 and 1 1206 bringing the supported +version<00:01:03.960> count<00:01:04.239> up<00:01:04.360> to + +00:01:05.789 --> 00:01:05.799 align:start position:0% +version count up to + + +00:01:05.799 --> 00:01:08.670 align:start position:0% +version count up to +9<00:01:06.799> moving<00:01:07.119> along<00:01:07.759> there<00:01:07.960> were<00:01:08.240> several + +00:01:08.670 --> 00:01:08.680 align:start position:0% +9 moving along there were several + + +00:01:08.680 --> 00:01:10.670 align:start position:0% +9 moving along there were several +graphical<00:01:09.119> improvements<00:01:09.640> for<00:01:09.840> your<00:01:10.119> viewing + +00:01:10.670 --> 00:01:10.680 align:start position:0% +graphical improvements for your viewing + + +00:01:10.680 --> 00:01:13.109 align:start position:0% +graphical improvements for your viewing +pleasure<00:01:11.680> first<00:01:11.920> and<00:01:12.080> foremost<00:01:12.759> Hollow + +00:01:13.109 --> 00:01:13.119 align:start position:0% +pleasure first and foremost Hollow + + +00:01:13.119 --> 00:01:14.630 align:start position:0% +pleasure first and foremost Hollow +structures<00:01:13.560> will<00:01:13.759> no<00:01:13.920> longer<00:01:14.200> turn<00:01:14.400> into + +00:01:14.630 --> 00:01:14.640 align:start position:0% +structures will no longer turn into + + +00:01:14.640 --> 00:01:17.950 align:start position:0% +structures will no longer turn into +swiss<00:01:15.000> cheese<00:01:15.400> at<00:01:15.560> lower<00:01:15.840> detail + +00:01:17.950 --> 00:01:17.960 align:start position:0% +swiss cheese at lower detail + + +00:01:17.960 --> 00:01:20.190 align:start position:0% +swiss cheese at lower detail +levels<00:01:18.960> in<00:01:19.040> order<00:01:19.280> to<00:01:19.439> help<00:01:19.680> smooth<00:01:20.040> the + +00:01:20.190 --> 00:01:20.200 align:start position:0% +levels in order to help smooth the + + +00:01:20.200 --> 00:01:22.149 align:start position:0% +levels in order to help smooth the +transition<00:01:20.799> between<00:01:21.159> vanilla<00:01:21.600> and<00:01:21.720> LOD + +00:01:22.149 --> 00:01:22.159 align:start position:0% +transition between vanilla and LOD + + +00:01:22.159 --> 00:01:26.030 align:start position:0% +transition between vanilla and LOD +chunks<00:01:22.880> grass<00:01:23.159> will<00:01:23.360> now<00:01:23.520> fade<00:01:23.799> from<00:01:24.079> green<00:01:24.360> to + +00:01:26.030 --> 00:01:26.040 align:start position:0% +chunks grass will now fade from green to + + +00:01:26.040 --> 00:01:28.510 align:start position:0% +chunks grass will now fade from green to +Brown<00:01:27.040> well<00:01:27.200> I<00:01:27.320> don't<00:01:27.560> recommend<00:01:28.040> using<00:01:28.360> this + +00:01:28.510 --> 00:01:28.520 align:start position:0% +Brown well I don't recommend using this + + +00:01:28.520 --> 00:01:29.950 align:start position:0% +Brown well I don't recommend using this +setting<00:01:28.840> unless<00:01:29.119> you<00:01:29.240> want<00:01:29.360> to<00:01:29.479> stretch<00:01:29.759> your + +00:01:29.950 --> 00:01:29.960 align:start position:0% +setting unless you want to stretch your + + +00:01:29.960 --> 00:01:32.469 align:start position:0% +setting unless you want to stretch your +your<00:01:30.079> GPU<00:01:30.439> to<00:01:30.600> the<00:01:30.759> max<00:01:31.479> you<00:01:31.640> can<00:01:31.880> now<00:01:32.040> render + +00:01:32.469 --> 00:01:32.479 align:start position:0% +your GPU to the max you can now render + + +00:01:32.479 --> 00:01:34.310 align:start position:0% +your GPU to the max you can now render +vertical<00:01:32.960> structures<00:01:33.439> like<00:01:33.640> pixelart<00:01:34.159> with + +00:01:34.310 --> 00:01:34.320 align:start position:0% +vertical structures like pixelart with + + +00:01:34.320 --> 00:01:38.429 align:start position:0% +vertical structures like pixelart with +almost<00:01:34.680> no<00:01:34.920> quality + +00:01:38.429 --> 00:01:38.439 align:start position:0% + + + +00:01:38.439 --> 00:01:40.990 align:start position:0% + +loss<00:01:39.439> along<00:01:39.759> with<00:01:39.920> all<00:01:40.200> those<00:01:40.399> new<00:01:40.640> visual + +00:01:40.990 --> 00:01:41.000 align:start position:0% +loss along with all those new visual + + +00:01:41.000 --> 00:01:43.230 align:start position:0% +loss along with all those new visual +changes<00:01:41.640> there<00:01:41.759> were<00:01:42.040> several<00:01:42.479> large<00:01:42.840> backend + +00:01:43.230 --> 00:01:43.240 align:start position:0% +changes there were several large backend + + +00:01:43.240 --> 00:01:45.590 align:start position:0% +changes there were several large backend +changes<00:01:43.640> as<00:01:43.799> well<00:01:44.520> the<00:01:44.680> largest<00:01:45.040> of<00:01:45.240> which<00:01:45.439> was + +00:01:45.590 --> 00:01:45.600 align:start position:0% +changes as well the largest of which was + + +00:01:45.600 --> 00:01:48.190 align:start position:0% +changes as well the largest of which was +the<00:01:45.880> change<00:01:46.159> to<00:01:46.360> dh's<00:01:47.040> database<00:01:47.520> format<00:01:48.040> to + +00:01:48.190 --> 00:01:48.200 align:start position:0% +the change to dh's database format to + + +00:01:48.200 --> 00:01:50.990 align:start position:0% +the change to dh's database format to +address<00:01:48.560> two<00:01:48.799> major<00:01:49.159> issues<00:01:50.159> but<00:01:50.320> don't<00:01:50.520> worry + +00:01:50.990 --> 00:01:51.000 align:start position:0% +address two major issues but don't worry + + +00:01:51.000 --> 00:01:52.830 align:start position:0% +address two major issues but don't worry +you<00:01:51.079> won't<00:01:51.320> have<00:01:51.439> to<00:01:51.560> regenerate<00:01:52.119> anything + +00:01:52.830 --> 00:01:52.840 align:start position:0% +you won't have to regenerate anything + + +00:01:52.840 --> 00:01:54.429 align:start position:0% +you won't have to regenerate anything +just<00:01:53.000> launch<00:01:53.280> your<00:01:53.439> world<00:01:53.719> and<00:01:53.920> DH<00:01:54.280> will + +00:01:54.429 --> 00:01:54.439 align:start position:0% +just launch your world and DH will + + +00:01:54.439 --> 00:01:57.069 align:start position:0% +just launch your world and DH will +automatically<00:01:55.000> migrate<00:01:55.320> to<00:01:55.439> the<00:01:55.560> new<00:01:56.079> version + +00:01:57.069 --> 00:01:57.079 align:start position:0% +automatically migrate to the new version + + +00:01:57.079 --> 00:01:58.910 align:start position:0% +automatically migrate to the new version +just<00:01:57.360> be<00:01:57.520> aware<00:01:57.799> that<00:01:57.920> it<00:01:58.039> will<00:01:58.280> take<00:01:58.439> a<00:01:58.600> while + +00:01:58.910 --> 00:01:58.920 align:start position:0% +just be aware that it will take a while + + +00:01:58.920 --> 00:02:00.749 align:start position:0% +just be aware that it will take a while +if<00:01:59.000> you<00:01:59.119> generated<00:01:59.560> a<00:01:59.600> lot<00:01:59.719> of<00:02:00.000> lods<00:02:00.439> and<00:02:00.600> have + +00:02:00.749 --> 00:02:00.759 align:start position:0% +if you generated a lot of lods and have + + +00:02:00.759 --> 00:02:02.950 align:start position:0% +if you generated a lot of lods and have +a<00:02:00.920> large + +00:02:02.950 --> 00:02:02.960 align:start position:0% +a large + + +00:02:02.960 --> 00:02:05.550 align:start position:0% +a large +database<00:02:03.960> one<00:02:04.119> of<00:02:04.360> those<00:02:04.600> issues<00:02:05.200> was<00:02:05.399> with + +00:02:05.550 --> 00:02:05.560 align:start position:0% +database one of those issues was with + + +00:02:05.560 --> 00:02:07.709 align:start position:0% +database one of those issues was with +World<00:02:05.840> gen<00:02:06.520> the<00:02:06.640> old<00:02:06.880> format<00:02:07.280> had<00:02:07.399> trouble + +00:02:07.709 --> 00:02:07.719 align:start position:0% +World gen the old format had trouble + + +00:02:07.719 --> 00:02:09.790 align:start position:0% +World gen the old format had trouble +determining<00:02:08.319> which<00:02:08.479> lods<00:02:09.039> were<00:02:09.319> or<00:02:09.479> weren't + +00:02:09.790 --> 00:02:09.800 align:start position:0% +determining which lods were or weren't + + +00:02:09.800 --> 00:02:11.949 align:start position:0% +determining which lods were or weren't +generated<00:02:10.679> which<00:02:10.920> caused<00:02:11.319> problems<00:02:11.680> like + +00:02:11.949 --> 00:02:11.959 align:start position:0% +generated which caused problems like + + +00:02:11.959 --> 00:02:15.589 align:start position:0% +generated which caused problems like +this<00:02:12.800> or<00:02:13.120> generating<00:02:13.560> areas<00:02:14.120> twice<00:02:15.120> luckily + +00:02:15.589 --> 00:02:15.599 align:start position:0% +this or generating areas twice luckily + + +00:02:15.599 --> 00:02:17.110 align:start position:0% +this or generating areas twice luckily +those<00:02:15.879> problems<00:02:16.120> are<00:02:16.319> both<00:02:16.519> solved<00:02:16.879> with<00:02:17.000> the + +00:02:17.110 --> 00:02:17.120 align:start position:0% +those problems are both solved with the + + +00:02:17.120 --> 00:02:19.790 align:start position:0% +those problems are both solved with the +new<00:02:17.319> system<00:02:18.280> and<00:02:18.440> as<00:02:18.560> a<00:02:18.720> nice<00:02:18.920> bonus<00:02:19.400> the<00:02:19.480> world + +00:02:19.790 --> 00:02:19.800 align:start position:0% +new system and as a nice bonus the world + + +00:02:19.800 --> 00:02:21.470 align:start position:0% +new system and as a nice bonus the world +generator<00:02:20.239> now<00:02:20.440> handles<00:02:20.800> extreme<00:02:21.120> render + +00:02:21.470 --> 00:02:21.480 align:start position:0% +generator now handles extreme render + + +00:02:21.480 --> 00:02:24.110 align:start position:0% +generator now handles extreme render +distances<00:02:22.120> much<00:02:22.360> better<00:02:23.360> so<00:02:23.599> if<00:02:23.720> you<00:02:23.879> want<00:02:24.000> to + +00:02:24.110 --> 00:02:24.120 align:start position:0% +distances much better so if you want to + + +00:02:24.120 --> 00:02:25.830 align:start position:0% +distances much better so if you want to +wait<00:02:24.319> the<00:02:24.440> 30<00:02:24.760> hours<00:02:25.080> to<00:02:25.239> generate<00:02:25.599> all<00:02:25.760> the + +00:02:25.830 --> 00:02:25.840 align:start position:0% +wait the 30 hours to generate all the + + +00:02:25.840 --> 00:02:28.710 align:start position:0% +wait the 30 hours to generate all the +way<00:02:25.959> out<00:02:26.080> to<00:02:26.239> 1024<00:02:26.840> render<00:02:27.200> distance<00:02:28.040> DH<00:02:28.519> will + +00:02:28.710 --> 00:02:28.720 align:start position:0% +way out to 1024 render distance DH will + + +00:02:28.720 --> 00:02:31.990 align:start position:0% +way out to 1024 render distance DH will +work<00:02:29.120> much<00:02:29.400> better + +00:02:31.990 --> 00:02:32.000 align:start position:0% + + + +00:02:32.000 --> 00:02:33.790 align:start position:0% + +along<00:02:32.239> with<00:02:32.360> the<00:02:32.480> new<00:02:32.640> world<00:02:32.879> gen<00:02:33.160> handling<00:02:33.640> we + +00:02:33.790 --> 00:02:33.800 align:start position:0% +along with the new world gen handling we + + +00:02:33.800 --> 00:02:35.710 align:start position:0% +along with the new world gen handling we +have<00:02:33.959> new<00:02:34.200> lossy<00:02:34.760> and<00:02:34.959> lossless<00:02:35.480> data + +00:02:35.710 --> 00:02:35.720 align:start position:0% +have new lossy and lossless data + + +00:02:35.720 --> 00:02:37.670 align:start position:0% +have new lossy and lossless data +compression<00:02:36.560> which<00:02:36.800> combined<00:02:37.239> can<00:02:37.360> reduce + +00:02:37.670 --> 00:02:37.680 align:start position:0% +compression which combined can reduce + + +00:02:37.680 --> 00:02:40.670 align:start position:0% +compression which combined can reduce +file<00:02:38.080> sizes<00:02:38.440> to<00:02:38.680> onethird<00:02:39.400> the<00:02:39.599> size<00:02:39.920> of + +00:02:40.670 --> 00:02:40.680 align:start position:0% +file sizes to onethird the size of + + +00:02:40.680 --> 00:02:42.949 align:start position:0% +file sizes to onethird the size of +dh2<00:02:41.680> just<00:02:41.840> be<00:02:41.959> aware<00:02:42.239> that<00:02:42.400> this<00:02:42.519> reduction + +00:02:42.949 --> 00:02:42.959 align:start position:0% +dh2 just be aware that this reduction + + +00:02:42.959 --> 00:02:44.990 align:start position:0% +dh2 just be aware that this reduction +won't<00:02:43.200> be<00:02:43.319> seen<00:02:43.560> for<00:02:43.760> old<00:02:44.000> migrated<00:02:44.480> worlds + +00:02:44.990 --> 00:02:45.000 align:start position:0% +won't be seen for old migrated worlds + + +00:02:45.000 --> 00:02:46.630 align:start position:0% +won't be seen for old migrated worlds +because<00:02:45.239> the<00:02:45.360> process<00:02:45.680> to<00:02:45.920> vacuum<00:02:46.239> a<00:02:46.360> large + +00:02:46.630 --> 00:02:46.640 align:start position:0% +because the process to vacuum a large + + +00:02:46.640 --> 00:02:49.030 align:start position:0% +because the process to vacuum a large +database<00:02:47.040> can<00:02:47.200> take<00:02:47.480> tens<00:02:47.760> of<00:02:47.959> minutes<00:02:48.800> and<00:02:48.920> we + +00:02:49.030 --> 00:02:49.040 align:start position:0% +database can take tens of minutes and we + + +00:02:49.040 --> 00:02:50.550 align:start position:0% +database can take tens of minutes and we +don't<00:02:49.200> want<00:02:49.280> to<00:02:49.440> make<00:02:49.599> you<00:02:49.800> wait<00:02:50.080> that<00:02:50.239> long<00:02:50.440> to + +00:02:50.550 --> 00:02:50.560 align:start position:0% +don't want to make you wait that long to + + +00:02:50.560 --> 00:02:52.110 align:start position:0% +don't want to make you wait that long to +load<00:02:50.800> into<00:02:51.000> a + +00:02:52.110 --> 00:02:52.120 align:start position:0% +load into a + + +00:02:52.120 --> 00:02:54.270 align:start position:0% +load into a +world<00:02:53.120> continuing<00:02:53.640> with<00:02:53.760> the<00:02:53.920> backend + +00:02:54.270 --> 00:02:54.280 align:start position:0% +world continuing with the backend + + +00:02:54.280 --> 00:02:55.910 align:start position:0% +world continuing with the backend +changes<00:02:54.920> we<00:02:55.040> have<00:02:55.159> a<00:02:55.280> few<00:02:55.519> performance + +00:02:55.910 --> 00:02:55.920 align:start position:0% +changes we have a few performance + + +00:02:55.920 --> 00:02:57.309 align:start position:0% +changes we have a few performance +improvements<00:02:56.360> y'all<00:02:56.560> will<00:02:56.680> be<00:02:56.840> very<00:02:57.000> excited + +00:02:57.309 --> 00:02:57.319 align:start position:0% +improvements y'all will be very excited + + +00:02:57.319 --> 00:03:00.070 align:start position:0% +improvements y'all will be very excited +to<00:02:57.440> hear<00:02:57.599> about<00:02:58.599> DH<00:02:59.040> is<00:02:59.200> now<00:02:59.360> significant<00:03:00.000> L + +00:03:00.070 --> 00:03:00.080 align:start position:0% +to hear about DH is now significant L + + +00:03:00.080 --> 00:03:02.670 align:start position:0% +to hear about DH is now significant L +more<00:03:00.200> memory<00:03:00.519> efficient<00:03:01.440> you<00:03:01.560> can<00:03:01.720> run<00:03:02.040> 512 + +00:03:02.670 --> 00:03:02.680 align:start position:0% +more memory efficient you can run 512 + + +00:03:02.680 --> 00:03:04.390 align:start position:0% +more memory efficient you can run 512 +render<00:03:03.000> distance<00:03:03.760> assuming<00:03:04.080> you've<00:03:04.239> already + +00:03:04.390 --> 00:03:04.400 align:start position:0% +render distance assuming you've already + + +00:03:04.400 --> 00:03:05.949 align:start position:0% +render distance assuming you've already +waited<00:03:04.640> the<00:03:04.720> 8<00:03:04.920> hours<00:03:05.159> needed<00:03:05.400> to<00:03:05.480> generate<00:03:05.799> it + +00:03:05.949 --> 00:03:05.959 align:start position:0% +waited the 8 hours needed to generate it + + +00:03:05.959 --> 00:03:09.350 align:start position:0% +waited the 8 hours needed to generate it +all<00:03:06.599> with<00:03:06.720> only<00:03:06.920> 2<00:03:07.159> GB<00:03:07.519> of<00:03:07.920> memory<00:03:08.920> although + +00:03:09.350 --> 00:03:09.360 align:start position:0% +all with only 2 GB of memory although + + +00:03:09.360 --> 00:03:11.390 align:start position:0% +all with only 2 GB of memory although +I'd<00:03:09.560> still<00:03:09.840> recommend<00:03:10.239> four<00:03:10.519> or<00:03:10.760> more + +00:03:11.390 --> 00:03:11.400 align:start position:0% +I'd still recommend four or more + + +00:03:11.400 --> 00:03:12.750 align:start position:0% +I'd still recommend four or more +especially<00:03:11.799> if<00:03:11.879> you<00:03:12.000> want<00:03:12.120> to<00:03:12.239> run<00:03:12.400> the<00:03:12.519> world + +00:03:12.750 --> 00:03:12.760 align:start position:0% +especially if you want to run the world + + +00:03:12.760 --> 00:03:14.710 align:start position:0% +especially if you want to run the world +generator<00:03:13.560> since<00:03:13.840> that<00:03:14.000> uses<00:03:14.319> Minecraft + +00:03:14.710 --> 00:03:14.720 align:start position:0% +generator since that uses Minecraft + + +00:03:14.720 --> 00:03:16.630 align:start position:0% +generator since that uses Minecraft +world<00:03:14.959> gen<00:03:15.200> code<00:03:15.640> which<00:03:15.799> is<00:03:16.000> still<00:03:16.360> pretty + +00:03:16.630 --> 00:03:16.640 align:start position:0% +world gen code which is still pretty + + +00:03:16.640 --> 00:03:19.509 align:start position:0% +world gen code which is still pretty +memory + +00:03:19.509 --> 00:03:19.519 align:start position:0% + + + +00:03:19.519 --> 00:03:22.350 align:start position:0% + +hungry<00:03:20.519> lastly<00:03:21.040> but<00:03:21.159> certainly<00:03:21.519> not<00:03:21.760> least + +00:03:22.350 --> 00:03:22.360 align:start position:0% +hungry lastly but certainly not least + + +00:03:22.360 --> 00:03:24.149 align:start position:0% +hungry lastly but certainly not least +thanks<00:03:22.560> to<00:03:22.720> null's<00:03:23.159> hard<00:03:23.360> work<00:03:23.680> we<00:03:23.879> now<00:03:24.040> have + +00:03:24.149 --> 00:03:24.159 align:start position:0% +thanks to null's hard work we now have + + +00:03:24.159 --> 00:03:25.990 align:start position:0% +thanks to null's hard work we now have +frustum<00:03:24.599> calling<00:03:25.319> which<00:03:25.480> means<00:03:25.680> you<00:03:25.799> can + +00:03:25.990 --> 00:03:26.000 align:start position:0% +frustum calling which means you can + + +00:03:26.000 --> 00:03:29.010 align:start position:0% +frustum calling which means you can +expect<00:03:26.280> a<00:03:26.519> significant<00:03:27.120> FPS<00:03:27.560> Improvement + +00:03:29.010 --> 00:03:29.020 align:start position:0% +expect a significant FPS Improvement + + +00:03:29.020 --> 00:03:30.750 align:start position:0% +expect a significant FPS Improvement +[Music] + +00:03:30.750 --> 00:03:30.760 align:start position:0% +[Music] + + +00:03:30.760 --> 00:03:32.270 align:start position:0% +[Music] +apologies<00:03:31.200> for<00:03:31.360> the<00:03:31.480> long<00:03:31.720> time<00:03:31.959> between + +00:03:32.270 --> 00:03:32.280 align:start position:0% +apologies for the long time between + + +00:03:32.280 --> 00:03:34.270 align:start position:0% +apologies for the long time between +updates<00:03:33.000> I<00:03:33.080> was<00:03:33.239> hoping<00:03:33.480> to<00:03:33.599> have<00:03:33.720> a<00:03:33.879> smaller + +00:03:34.270 --> 00:03:34.280 align:start position:0% +updates I was hoping to have a smaller + + +00:03:34.280 --> 00:03:36.710 align:start position:0% +updates I was hoping to have a smaller +update<00:03:34.599> out<00:03:34.799> much<00:03:35.000> sooner<00:03:35.840> but<00:03:36.080> the<00:03:36.159> world<00:03:36.439> gen + +00:03:36.710 --> 00:03:36.720 align:start position:0% +update out much sooner but the world gen + + +00:03:36.720 --> 00:03:38.309 align:start position:0% +update out much sooner but the world gen +and<00:03:36.879> file<00:03:37.159> size<00:03:37.400> issues<00:03:37.760> ended<00:03:37.959> up<00:03:38.080> being + +00:03:38.309 --> 00:03:38.319 align:start position:0% +and file size issues ended up being + + +00:03:38.319 --> 00:03:40.070 align:start position:0% +and file size issues ended up being +something<00:03:38.599> I<00:03:38.720> couldn't<00:03:39.040> ignore<00:03:39.599> which<00:03:39.840> both + +00:03:40.070 --> 00:03:40.080 align:start position:0% +something I couldn't ignore which both + + +00:03:40.080 --> 00:03:41.949 align:start position:0% +something I couldn't ignore which both +required<00:03:40.599> major<00:03:40.959> changes<00:03:41.360> that<00:03:41.480> took<00:03:41.680> months + +00:03:41.949 --> 00:03:41.959 align:start position:0% +required major changes that took months + + +00:03:41.959 --> 00:03:44.550 align:start position:0% +required major changes that took months +to<00:03:42.280> finish<00:03:43.280> it<00:03:43.400> would<00:03:43.519> have<00:03:43.640> been<00:03:43.840> much<00:03:44.120> faster + +00:03:44.550 --> 00:03:44.560 align:start position:0% +to finish it would have been much faster + + +00:03:44.560 --> 00:03:46.229 align:start position:0% +to finish it would have been much faster +if<00:03:44.680> I<00:03:44.760> could<00:03:44.920> do<00:03:45.040> this + +00:03:46.229 --> 00:03:46.239 align:start position:0% +if I could do this + + +00:03:46.239 --> 00:03:48.070 align:start position:0% +if I could do this +full-time + +00:03:48.070 --> 00:03:48.080 align:start position:0% +full-time + + +00:03:48.080 --> 00:03:54.830 align:start position:0% +full-time +H<00:03:49.080> hey<00:03:49.319> Mojang<00:03:50.319> are<00:03:50.439> you<00:03:50.640> hiring + +00:03:54.830 --> 00:03:54.840 align:start position:0% + + + +00:03:54.840 --> 00:04:25.870 align:start position:0% + +[Music] + +00:04:25.870 --> 00:04:25.880 align:start position:0% +[Music] + + +00:04:25.880 --> 00:04:28.189 align:start position:0% +[Music] +I'm<00:04:26.880> call<00:04:27.199> me + +00:04:28.189 --> 00:04:28.199 align:start position:0% +I'm call me + + +00:04:28.199 --> 00:04:32.880 align:start position:0% +I'm call me +down<00:04:29.199> so<00:04:29.880> more + diff --git a/package-lock.json b/package-lock.json index 43d0fea..2e131c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "simple-get": "^4.0.1", "stripe": "^15.7.0", "tsc": "^2.0.4", + "youtube-dl-exec": "^3.0.2", "zod": "^3.22.4" }, "devDependencies": { @@ -922,6 +923,15 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@jclem/logfmt2": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@jclem/logfmt2/-/logfmt2-2.4.3.tgz", + "integrity": "sha512-d7zluLlx+JRtVICF0+ghcrVdXBdE3eXrpIuFdcCcWxA3ABOyemkTySG4ha2AdsWFwAnh8tkB1vtyeZsWAbLumg==", + "engines": { + "node": ">= 14.x", + "npm": ">= 7.x" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -986,6 +996,14 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kikobeats/time-span": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@kikobeats/time-span/-/time-span-1.0.5.tgz", + "integrity": "sha512-txRAdmi35N1wnsLS1AO5mTlbY5Cv5/61WXqek2y3L9Q7u4mgdUVq819so5xe753hL5gYeLzlWoJ/VJfXg9nx8g==", + "engines": { + "node": ">= 18" + } + }, "node_modules/@neondatabase/serverless": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.3.tgz", @@ -2110,6 +2128,23 @@ "node": "*" } }, + "node_modules/bin-version-check": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-6.0.0.tgz", + "integrity": "sha512-k9TS/pADINX9UlErjAkbkxDer8C+WlguMwySI8sLMGLUMDvwuHmDx00yoHe7nxshgwtLBcMWQgrlwjzscUeQKg==", + "deprecated": "Renamed to binary-version-check: https://www.npmjs.com/package/binary-version-check", + "dependencies": { + "binary-version": "^7.1.0", + "semver": "^7.6.0", + "semver-truncate": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2120,6 +2155,145 @@ "node": ">=8" } }, + "node_modules/binary-version": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/binary-version/-/binary-version-7.1.0.tgz", + "integrity": "sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==", + "dependencies": { + "execa": "^8.0.1", + "find-versions": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/binary-version/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/binary-version/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-version/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/binary-version/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -2473,6 +2647,17 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -2522,7 +2707,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2537,13 +2721,20 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, "license": "ISC", "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" } }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "engines": { + "node": ">=8" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2561,6 +2752,32 @@ } } }, + "node_modules/debug-fabulous": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-2.0.2.tgz", + "integrity": "sha512-XfAbX8/owqC+pjIg0/+3V1gp8TugJT7StX/TE1TYedjrRf7h7SgUAL/+gKoAQGPCLbSU5L5LPvDg4/cGn1E/WA==", + "dependencies": { + "debug": "^4", + "memoizee": "0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug-logfmt": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/debug-logfmt/-/debug-logfmt-1.2.2.tgz", + "integrity": "sha512-MAPU+m9lzLMkxI8k6/kJ/MGLGNtHOsW8RHriLkRxe/jFFW2iXmiGGUG9aYTRIWo5ejOFqLB10HqZ6+TN4toQFQ==", + "dependencies": { + "@jclem/logfmt2": "~2.4.3", + "@kikobeats/time-span": "~1.0.2", + "debug-fabulous": "~2.0.2", + "pretty-ms": "~7.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -3241,7 +3458,6 @@ "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -3257,7 +3473,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, "license": "MIT", "dependencies": { "d": "1", @@ -3269,7 +3484,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, "license": "ISC", "dependencies": { "d": "^1.0.1", @@ -3280,7 +3494,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, "license": "ISC", "dependencies": { "d": "1", @@ -4431,7 +4644,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, "license": "MIT", "dependencies": { "d": "1", @@ -4484,7 +4696,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, "license": "ISC", "dependencies": { "type": "^2.7.2" @@ -4494,7 +4705,6 @@ "version": "2.7.2", "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true, "license": "ISC" }, "node_modules/extend": { @@ -4828,6 +5038,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-versions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", + "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", + "dependencies": { + "semver-regex": "^4.0.5", + "super-regex": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -4956,6 +5181,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/function.prototype.name": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", @@ -5918,7 +6154,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, "license": "MIT" }, "node_modules/is-proto-prop": { @@ -6061,6 +6296,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-unix": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/is-unix/-/is-unix-2.0.10.tgz", + "integrity": "sha512-CcasZSEOQUoE7JHy56se4wyRhdJfjohuMWYmceSTaDY4naKyd1fpLiY8rJsIT6AKfVstQAhHJOfPx7jcUxK61Q==", + "engines": { + "node": ">= 12" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6108,7 +6351,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/jest-worker": { @@ -6422,23 +6664,10 @@ "node": ">=0.10.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, "license": "MIT", "dependencies": { "es5-ext": "~0.10.2" @@ -6472,7 +6701,6 @@ "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, "license": "ISC", "dependencies": { "d": "^1.0.1", @@ -6509,7 +6737,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -6675,7 +6902,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, "license": "ISC" }, "node_modules/node-domexception": { @@ -7044,6 +7270,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "engines": { + "node": ">=6" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7068,7 +7302,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7390,6 +7623,20 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -7996,13 +8243,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -8010,6 +8253,31 @@ "node": ">=10" } }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-truncate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", + "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -8061,7 +8329,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -8074,7 +8341,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8479,6 +8745,21 @@ "node": ">=12.*" } }, + "node_modules/super-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz", + "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", + "dependencies": { + "function-timeout": "^1.0.1", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8623,17 +8904,38 @@ "real-require": "^0.2.0" } }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/timers-ext": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, "license": "ISC", "dependencies": { "es5-ext": "~0.10.46", "next-tick": "1" } }, + "node_modules/tinyspawn": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/tinyspawn/-/tinyspawn-1.2.13.tgz", + "integrity": "sha512-XZG5oVXMvbGzxggFzLebCAoXBqRsA2Ew/UsZUguOGhC2699uID6GTA5tcuW2GH3s/i/thFYDuPRyaG3A46LwgA==", + "engines": { + "node": ">= 18" + } + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -8771,7 +9073,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true, "license": "ISC" }, "node_modules/type-check": { @@ -9153,7 +9454,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9438,6 +9738,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/youtube-dl-exec": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-3.0.2.tgz", + "integrity": "sha512-kSNss5pkiZ7nXqh13m8pw1Os5s4t81RkpsZ7YozaJYVUDFrSXWKtvzhfaJ8dJH7QiK5qbeiuWs2z86lLuzMkRA==", + "hasInstallScript": true, + "dependencies": { + "bin-version-check": "~6.0.0", + "dargs": "~7.0.0", + "debug-logfmt": "~1.2.2", + "is-unix": "~2.0.10", + "tinyspawn": "~1.2.9" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/zod": { "version": "3.22.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", diff --git a/package.json b/package.json index 592cb4f..999f9f9 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "simple-get": "^4.0.1", "stripe": "^15.7.0", "tsc": "^2.0.4", + "youtube-dl-exec": "^3.0.2", "zod": "^3.22.4" }, "xo": { diff --git a/src/routes/dashboard.js b/src/routes/dashboard.js index 5c1c6a4..532589e 100644 --- a/src/routes/dashboard.js +++ b/src/routes/dashboard.js @@ -5,6 +5,7 @@ import { db } from "../db/index.js"; import { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js"; import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js"; import { jsonToCsv, getAccessToken, getVideoCaptions, getCaptionText, parseTextFromCaptions, createBlogFromCaptions, createArticleSlug, getVideoById, env } from "../utils/index.js"; +import youtubeDl from "youtube-dl-exec"; /** * @@ -215,15 +216,39 @@ export const dashboardRoutes = (fastify, _, done) => { } const access_token = await getAccessToken(fastify, req); - const captions = await getVideoCaptions(access_token, req.body.video_id); - const preferred_caption_id = captions.find(x => x.snippet.language == 'en').id; + + let urlRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/; + let match = req.body.video_id.match(urlRegex); + if (!match) { + reply.status(400).send({ + success: false, + message: "Invalid Youtube URL" + }); + return; + } + + // youtube-dl --write-sub --sub-lang en --skip-download URL + + const result = await youtubeDl(req.body.video_id, { + skipDownload: true, + writeAutoSub: true, + subLang: "en", + dumpSingleJson: true, + }); + + const captions = await (await fetch(result.automatic_captions.en.find(x=>x.ext==="srv1").url)).text(); + + const caption_text = convertSRV1ToPlainText(captions); + // const captions = await getVideoCaptions(access_token, req.body.video_id); + // const preferred_caption_id = captions.find(x => x.snippet.language == 'en').id; reply.send({ success: true }); - const caption_body = await getCaptionText(access_token, preferred_caption_id); - const caption_text = parseTextFromCaptions(caption_body).substring(28); + // const caption_body = await getCaptionText(access_token, preferred_caption_id); + // const caption_text = parseTextFromCaptions(caption_body).substring(28); + // const caption_text const video_data = await getVideoById(access_token, req.body.video_id); @@ -369,3 +394,24 @@ export const dashboardRoutes = (fastify, _, done) => { done(); }; + +function convertSRV1ToPlainText(transcript) { + // Define regular expression to extract text content + const textRegex = /]+>(.*?)<\/text>/g; + + // Initialize an empty array to hold the plain text lines + const plainTextLines = []; + + // Match text segments using regular expression + let match; + while ((match = textRegex.exec(transcript)) !== null) { + // Extract text content and remove any HTML tags + const textContent = match[1].replace(/<[^>]+>/g, ''); + + // Add text content to the plain text lines array + plainTextLines.push(textContent); + } + + // Join the plain text lines into a single string and return it + return plainTextLines.join('\n'); +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index e2dd71c..ab5cd46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -225,6 +225,11 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@jclem/logfmt2@~2.4.3": + version "2.4.3" + resolved "https://registry.npmjs.org/@jclem/logfmt2/-/logfmt2-2.4.3.tgz" + integrity sha512-d7zluLlx+JRtVICF0+ghcrVdXBdE3eXrpIuFdcCcWxA3ABOyemkTySG4ha2AdsWFwAnh8tkB1vtyeZsWAbLumg== + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" @@ -265,6 +270,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@kikobeats/time-span@~1.0.2": + version "1.0.5" + resolved "https://registry.npmjs.org/@kikobeats/time-span/-/time-span-1.0.5.tgz" + integrity sha512-txRAdmi35N1wnsLS1AO5mTlbY5Cv5/61WXqek2y3L9Q7u4mgdUVq819so5xe753hL5gYeLzlWoJ/VJfXg9nx8g== + "@neondatabase/serverless@>=0.1": version "0.9.3" resolved "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.9.3.tgz" @@ -911,11 +921,28 @@ bignumber.js@^9.0.0: resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== +bin-version-check@~6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-6.0.0.tgz" + integrity sha512-k9TS/pADINX9UlErjAkbkxDer8C+WlguMwySI8sLMGLUMDvwuHmDx00yoHe7nxshgwtLBcMWQgrlwjzscUeQKg== + dependencies: + binary-version "^7.1.0" + semver "^7.6.0" + semver-truncate "^3.0.0" + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +binary-version@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/binary-version/-/binary-version-7.1.0.tgz" + integrity sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw== + dependencies: + execa "^8.0.1" + find-versions "^6.0.0" + bplist-parser@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz" @@ -1136,6 +1163,11 @@ confusing-browser-globals@1.0.11: resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== +convert-hrtime@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz" + integrity sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg== + cookie-signature@^1.1.0: version "1.2.1" resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz" @@ -1173,6 +1205,29 @@ d@^1.0.1, d@1: es5-ext "^0.10.50" type "^1.0.1" +dargs@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +debug-fabulous@~2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-2.0.2.tgz" + integrity sha512-XfAbX8/owqC+pjIg0/+3V1gp8TugJT7StX/TE1TYedjrRf7h7SgUAL/+gKoAQGPCLbSU5L5LPvDg4/cGn1E/WA== + dependencies: + debug "^4" + memoizee "0.4" + +debug-logfmt@~1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/debug-logfmt/-/debug-logfmt-1.2.2.tgz" + integrity sha512-MAPU+m9lzLMkxI8k6/kJ/MGLGNtHOsW8RHriLkRxe/jFFW2iXmiGGUG9aYTRIWo5ejOFqLB10HqZ6+TN4toQFQ== + dependencies: + "@jclem/logfmt2" "~2.4.3" + "@kikobeats/time-span" "~1.0.2" + debug-fabulous "~2.0.2" + pretty-ms "~7.0.1" + debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" @@ -1180,7 +1235,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: +debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1911,6 +1966,21 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + ext@^1.1.2: version "1.7.0" resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" @@ -2111,6 +2181,14 @@ find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" +find-versions@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz" + integrity sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA== + dependencies: + semver-regex "^4.0.5" + super-regex "^1.0.0" + flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" @@ -2174,6 +2252,11 @@ function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +function-timeout@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz" + integrity sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA== + function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" @@ -2249,6 +2332,11 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" @@ -2484,6 +2572,11 @@ human-signals@^4.3.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" @@ -2803,6 +2896,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-unix@~2.0.10: + version "2.0.10" + resolved "https://registry.npmjs.org/is-unix/-/is-unix-2.0.10.tgz" + integrity sha512-CcasZSEOQUoE7JHy56se4wyRhdJfjohuMWYmceSTaDY4naKyd1fpLiY8rJsIT6AKfVstQAhHJOfPx7jcUxK61Q== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" @@ -3032,13 +3130,6 @@ lowercase-keys@^1.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lru-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz" @@ -3053,7 +3144,7 @@ mailtrap@^3.3.0: dependencies: axios ">=0.27" -memoizee@^0.4.15: +memoizee@^0.4.15, memoizee@0.4: version "0.4.15" resolved "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz" integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== @@ -3221,9 +3312,9 @@ npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.3.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -3416,6 +3507,11 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -3664,6 +3760,13 @@ prettier@^3.0.0, prettier@^3.1.1, prettier@>=3.0.0: resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz" integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== +pretty-ms@~7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + process-warning@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz" @@ -3929,6 +4032,18 @@ secure-json-parse@^2.4.0, secure-json-parse@^2.7.0: resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== + +semver-truncate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz" + integrity sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg== + dependencies: + semver "^7.3.5" + semver@^5.7.2: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" @@ -3939,12 +4054,10 @@ semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.0.0, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== "semver@2 || 3 || 4 || 5": version "5.7.2" @@ -4030,6 +4143,11 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" @@ -4203,6 +4321,14 @@ stripe@^15.7.0: "@types/node" ">=8.1.0" qs "^6.11.0" +super-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz" + integrity sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg== + dependencies: + function-timeout "^1.0.1" + time-span "^5.1.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -4288,6 +4414,13 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" +time-span@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz" + integrity sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA== + dependencies: + convert-hrtime "^5.0.0" + timers-ext@^0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz" @@ -4296,6 +4429,11 @@ timers-ext@^0.1.7: es5-ext "~0.10.46" next-tick "1" +tinyspawn@~1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/tinyspawn/-/tinyspawn-1.2.13.tgz" + integrity sha512-XZG5oVXMvbGzxggFzLebCAoXBqRsA2Ew/UsZUguOGhC2699uID6GTA5tcuW2GH3s/i/thFYDuPRyaG3A46LwgA== + titleize@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz" @@ -4670,7 +4808,7 @@ xtend@^4.0.0: resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -yallist@^4.0.0, yallist@4.0.0: +yallist@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== @@ -4685,6 +4823,17 @@ yocto-queue@^1.0.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +youtube-dl-exec@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-3.0.2.tgz" + integrity sha512-kSNss5pkiZ7nXqh13m8pw1Os5s4t81RkpsZ7YozaJYVUDFrSXWKtvzhfaJ8dJH7QiK5qbeiuWs2z86lLuzMkRA== + dependencies: + bin-version-check "~6.0.0" + dargs "~7.0.0" + debug-logfmt "~1.2.2" + is-unix "~2.0.10" + tinyspawn "~1.2.9" + zod@^3.22.4: version "3.22.4" resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz"