From ef4ccec3947c70015486d5d3269e0ca8dd8bb244 Mon Sep 17 00:00:00 2001 From: AlkenD Date: Tue, 6 Aug 2024 01:39:33 +0530 Subject: [PATCH] feat: new UI components feat: base BrowsePage design fix: remove transitions from content Cards fix: match content data with the new temp server --- src/config/config.ts | 2 +- src/config/default.config.json | 2 +- src/lib/components/actions/CheckBox.tsx | 23 + src/lib/components/actions/TextInput.tsx | 20 +- src/lib/components/logic/LazyImage.tsx | 4 +- .../logic/Sliders/CollectionSlider.tsx | 5 +- .../logic/Sliders/ContentSlider.tsx | 24 +- .../components/logic/Sliders/GenreSlider.tsx | 28 +- .../components/logic/Sliders/MainSlider.tsx | 32 +- .../components/ui/Cards/CollectionCard.tsx | 31 +- src/lib/components/ui/Cards/GenreCard.tsx | 2 +- src/lib/components/ui/Cards/MovieCard.tsx | 78 +- src/lib/components/ui/Cards/TvCard.tsx | 85 +- src/lib/components/ui/GradiantBgWrapper.tsx | 22 +- src/lib/hooks/useImageColors.ts | 11 +- src/lib/pages/BrowsePage.tsx | 138 +- src/lib/pages/HomePage.tsx | 33 +- src/lib/pages/MovieInfoPage.tsx | 4 +- src/lib/pages/TvInfoPage.tsx | 19 +- ts/.env | 1 - ts/data/bookmarks.json | 112 - ts/data/collections.json | 30 - ts/data/home.json | 386 -- ts/index.js | 403 -- ts/package.json | 23 - ts/pnpm-lock.yaml | 1935 -------- ts/tmp/movies.json | 1476 ------ ts/tmp/tv.json | 4134 ----------------- ts/vercel.json | 16 - 29 files changed, 308 insertions(+), 8771 deletions(-) create mode 100644 src/lib/components/actions/CheckBox.tsx delete mode 100644 ts/.env delete mode 100644 ts/data/bookmarks.json delete mode 100644 ts/data/collections.json delete mode 100644 ts/data/home.json delete mode 100644 ts/index.js delete mode 100644 ts/package.json delete mode 100644 ts/pnpm-lock.yaml delete mode 100644 ts/tmp/movies.json delete mode 100644 ts/tmp/tv.json delete mode 100644 ts/vercel.json diff --git a/src/config/config.ts b/src/config/config.ts index 1ae3427..4f945cd 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -22,7 +22,7 @@ const APP_API_PATHS = { home: APP_CONFIG.server_path + "/" + APP_CONFIG.home_path, movie: APP_CONFIG.server_path + "/" + APP_CONFIG.movie_path, tv: APP_CONFIG.server_path + "/" + APP_CONFIG.tv_path, - image: APP_CONFIG.server_path + "/" + APP_CONFIG.image_path, + image: APP_CONFIG.server_path + "/" + APP_CONFIG.image_path + "/original", }; export { APP_CONFIG, APP_API_PATHS }; diff --git a/src/config/default.config.json b/src/config/default.config.json index 770bdcd..03cd257 100644 --- a/src/config/default.config.json +++ b/src/config/default.config.json @@ -1,5 +1,5 @@ { - "server_path": "http://localhost:3003", + "server_path": "http://localhost:8000", "home_path": "home", "movie_path": "movie", "tv_path": "tv", diff --git a/src/lib/components/actions/CheckBox.tsx b/src/lib/components/actions/CheckBox.tsx new file mode 100644 index 0000000..bad58b1 --- /dev/null +++ b/src/lib/components/actions/CheckBox.tsx @@ -0,0 +1,23 @@ +import { Checkbox as HUICheckBox } from "@headlessui/react"; +import { useState } from "react"; +import HeroIcon from "../ui/HeroIcon"; + +const Checkbox = ({ id }: any) => { + const [enabled, setEnabled] = useState(false); + + return ( + + + + ); +}; + +export default Checkbox; diff --git a/src/lib/components/actions/TextInput.tsx b/src/lib/components/actions/TextInput.tsx index 6158106..3fad71f 100644 --- a/src/lib/components/actions/TextInput.tsx +++ b/src/lib/components/actions/TextInput.tsx @@ -7,17 +7,15 @@ interface TextInput { const TextInput = ({ label, description }: TextInput) => { return ( -
- - - {description && ( - - {description} - - )} - - -
+ + + {description && ( + + {description} + + )} + + ); }; diff --git a/src/lib/components/logic/LazyImage.tsx b/src/lib/components/logic/LazyImage.tsx index 867f089..5f12ce4 100644 --- a/src/lib/components/logic/LazyImage.tsx +++ b/src/lib/components/logic/LazyImage.tsx @@ -5,9 +5,10 @@ interface LazyImageProps { src: string; alt: string; className?: string; + style?: any; } -const LazyImage = ({ src, alt, className = "" }: LazyImageProps) => { +const LazyImage = ({ src, alt, className = "", style }: LazyImageProps) => { const [imageLoading, setImageLoading] = useState(true); const imageLoaded = () => { @@ -30,6 +31,7 @@ const LazyImage = ({ src, alt, className = "" }: LazyImageProps) => { animate={imageLoading ? "hide" : "show"} onLoad={imageLoaded} className="object-cover h-full w-full" + style={style} src={src} alt={alt} /> diff --git a/src/lib/components/logic/Sliders/CollectionSlider.tsx b/src/lib/components/logic/Sliders/CollectionSlider.tsx index 7314176..52fb253 100644 --- a/src/lib/components/logic/Sliders/CollectionSlider.tsx +++ b/src/lib/components/logic/Sliders/CollectionSlider.tsx @@ -5,7 +5,8 @@ import generateRandomString from "../../../utils/uidGenerator"; import { useEffect, useRef } from "react"; import CollectionCard from "../../ui/Cards/CollectionCard"; -const CollectionSlider = ({ title, data = [] }: any) => { +const CollectionSlider = ({ title, data }: any) => { + console.log(data); const sliderUid = generateRandomString(); const shadowTextRef = useRef(null); @@ -71,4 +72,4 @@ const CollectionSlider = ({ title, data = [] }: any) => { ); }; -export default CollectionSlider; +export default CollectionSlider; \ No newline at end of file diff --git a/src/lib/components/logic/Sliders/ContentSlider.tsx b/src/lib/components/logic/Sliders/ContentSlider.tsx index 8ed537a..0d61d5d 100644 --- a/src/lib/components/logic/Sliders/ContentSlider.tsx +++ b/src/lib/components/logic/Sliders/ContentSlider.tsx @@ -31,7 +31,7 @@ const ContentSlider = ({ title, type, data = [] }: any) => { }, []); return ( -
+
{title}
@@ -62,15 +62,19 @@ const ContentSlider = ({ title, type, data = [] }: any) => { prevEl: `.customSwiperPrevious${sliderUid}`, }} > - {data.map((item: any, index: number) => ( - - {type === "movie" ? ( - - ) : ( - - )} - - ))} + {data.map((item: any, index: any) => { + const mediaType = type !== undefined ? type : item.media_type; + + return ( + + {mediaType === "movie" ? ( + + ) : ( + + )} + + ); + })}
); diff --git a/src/lib/components/logic/Sliders/GenreSlider.tsx b/src/lib/components/logic/Sliders/GenreSlider.tsx index 9bd0cd6..2c18067 100644 --- a/src/lib/components/logic/Sliders/GenreSlider.tsx +++ b/src/lib/components/logic/Sliders/GenreSlider.tsx @@ -5,33 +5,7 @@ import generateRandomString from "../../../utils/uidGenerator"; import { useEffect, useRef } from "react"; import GenreCard from "../../ui/Cards/GenreCard"; -const GenreSlider = ({ data = [] }: any) => { - data = [ - { - id: 1, - genre: "Action", - }, - { - id: 2, - genre: "Adventure", - }, - { - id: 3, - genre: "Sci-Fi", - }, - { - id: 4, - genre: "Thriller", - }, - { - id: 5, - genre: "Horror", - }, - { - id: 6, - genre: "Comedy", - }, - ]; +const GenreSlider = ({ data }: any) => { const sliderUid = generateRandomString(); const shadowTextRef = useRef(null); diff --git a/src/lib/components/logic/Sliders/MainSlider.tsx b/src/lib/components/logic/Sliders/MainSlider.tsx index 430c841..875691d 100644 --- a/src/lib/components/logic/Sliders/MainSlider.tsx +++ b/src/lib/components/logic/Sliders/MainSlider.tsx @@ -16,24 +16,24 @@ import generateRandomString from "../../../utils/uidGenerator"; import { APP_API_PATHS } from "../../../../config/config"; const SlideContent = ({ item, index }: any) => { - const colors = useImageColors(`${APP_API_PATHS.image}${item.backdrop_path}`); + // const colors = useImageColors(`${APP_API_PATHS.image}${item.backdrop_path}`); - useEffect(() => { - if (Object.keys(colors).length !== 0 && item.id) { - const updateSlider = async () => { - try { - await axios.patch(`${APP_API_PATHS.home}?update=main_slider`, { - tmdbId: item.id, - colors, - }); - } catch (error) { - console.error("Error with patch request:", error); - } - }; + // useEffect(() => { + // if (colors && Object.keys(colors).length !== 0 && item.id) { + // const updateSlider = async () => { + // try { + // await axios.patch(`${APP_API_PATHS.home}?update=main_slider`, { + // tmdbId: item.id, + // colors, + // }); + // } catch (error) { + // console.error("Error with patch request:", error); + // } + // }; - updateSlider(); - } - }, [colors, item.id]); + // updateSlider(); + // } + // }, [colors, item.id]); return ( <> { return ( - -
-
-
- -
-
- + +
+
+
+
+ +
+
{item.name}
); }; diff --git a/src/lib/components/ui/Cards/GenreCard.tsx b/src/lib/components/ui/Cards/GenreCard.tsx index 79b7380..4bccbb3 100644 --- a/src/lib/components/ui/Cards/GenreCard.tsx +++ b/src/lib/components/ui/Cards/GenreCard.tsx @@ -1,7 +1,7 @@ const GenreCard = ({ item }: any) => { return (
-
{item.genre}
+
{item.name}
); }; diff --git a/src/lib/components/ui/Cards/MovieCard.tsx b/src/lib/components/ui/Cards/MovieCard.tsx index 4138722..a0593e0 100644 --- a/src/lib/components/ui/Cards/MovieCard.tsx +++ b/src/lib/components/ui/Cards/MovieCard.tsx @@ -1,74 +1,40 @@ import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react"; -import { motion, AnimatePresence } from "framer-motion"; import { EllipsisHorizontalIcon } from "@heroicons/react/24/solid"; import { Link } from "react-router-dom"; -import { useState, useEffect } from "react"; import { APP_API_PATHS } from "../../../../config/config"; import LazyImage from "../../logic/LazyImage"; const MovieCard = ({ item }: any) => { - const [isHover, setIsHover] = useState(false); - const [isOpen, setIsOpen] = useState(false); - return ( -
{ - setIsHover(true); - }} - onMouseLeave={() => !isOpen && setIsHover(false)} - className={`w-full space-y-2 group transition-transform mt-4 ${ - isHover && "scale-105" - }`} - > +
-
+
- {({ open }) => { - useEffect(() => { - setIsOpen(open); - setIsHover(open); - }, [open]); - return ( - <> - - - - - {open && ( - - - - - - - - - )} - - - ); - }} + + + + + + + + + + +
diff --git a/src/lib/components/ui/Cards/TvCard.tsx b/src/lib/components/ui/Cards/TvCard.tsx index 147f9e2..6e03a3c 100644 --- a/src/lib/components/ui/Cards/TvCard.tsx +++ b/src/lib/components/ui/Cards/TvCard.tsx @@ -1,81 +1,40 @@ import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react"; -import { motion, AnimatePresence } from "framer-motion"; import { EllipsisHorizontalIcon } from "@heroicons/react/24/solid"; import { Link } from "react-router-dom"; -import { useState, useEffect } from "react"; -import Chip from "../Chip"; import { APP_API_PATHS } from "../../../../config/config"; import LazyImage from "../../logic/LazyImage"; const TvCard = ({ item }: any) => { - const [isHover, setIsHover] = useState(false); - const [isOpen, setIsOpen] = useState(false); - return ( -
{ - setIsHover(true); - }} - onMouseLeave={() => !isOpen && setIsHover(false)} - className={`w-full space-y-2 group transition-transform mt-4 ${ - isHover && "scale-105" - }`} - > +
- {item.number_of_seasons !== 0 && ( - - {item.number_of_seasons}{" "} - {item.number_of_seasons === 1 ? "Season" : "Seasons"} - - )} -
+
- {({ open }) => { - useEffect(() => { - setIsOpen(open); - setIsHover(open); - }, [open]); - return ( - <> - - - - - {open && ( - - - - - - - - - )} - - - ); - }} + + + + + + + + + + +
diff --git a/src/lib/components/ui/GradiantBgWrapper.tsx b/src/lib/components/ui/GradiantBgWrapper.tsx index 281e80d..4dd2832 100644 --- a/src/lib/components/ui/GradiantBgWrapper.tsx +++ b/src/lib/components/ui/GradiantBgWrapper.tsx @@ -2,10 +2,12 @@ import { motion } from "framer-motion"; const GradiantBgWrapper = ({ className, colors, children }: any) => { return ( - + {colors && Object.keys(colors).length !== 0 ? ( + { rgba(${colors.color3[0]}, ${colors.color3[1]}, ${colors.color3[2]}, 0) 33% ) `, - }} - > - {children} - + }} + > + {children} + + ) : ( +
{children}
+ )} + ); }; diff --git a/src/lib/hooks/useImageColors.ts b/src/lib/hooks/useImageColors.ts index e8c67ef..095e6fe 100644 --- a/src/lib/hooks/useImageColors.ts +++ b/src/lib/hooks/useImageColors.ts @@ -8,6 +8,7 @@ interface ColorObject { [key: string]: RGBColor; } +// Function to get prominent colors from an image const getProminentColors = ( image: HTMLImageElement, numColors: number @@ -16,6 +17,7 @@ const getProminentColors = ( const ctx = canvas.getContext("2d"); if (!ctx) { + console.error("Failed to get canvas context"); return {}; } @@ -46,6 +48,7 @@ const getProminentColors = ( return prominentColors; }; +// Custom hook to use prominent colors const useImageColors = ( imageUrl: string, numColors: number = 3 @@ -54,7 +57,7 @@ const useImageColors = ( useEffect(() => { const image = new Image(); - image.crossOrigin = "Anonymous"; + image.crossOrigin = "Anonymous"; // Ensure CORS is handled correctly image.src = imageUrl; image.onload = () => { @@ -65,6 +68,12 @@ const useImageColors = ( image.onerror = () => { console.error("Failed to load image"); }; + + // Cleanup function + return () => { + image.onload = null; + image.onerror = null; + }; }, [imageUrl, numColors]); return colors; diff --git a/src/lib/pages/BrowsePage.tsx b/src/lib/pages/BrowsePage.tsx index 848fb17..9988518 100644 --- a/src/lib/pages/BrowsePage.tsx +++ b/src/lib/pages/BrowsePage.tsx @@ -1,16 +1,140 @@ import { useLoaderData } from "react-router-dom"; import TransitionWrapper from "./TransitionWrapper"; import GradiantBgWrapper from "../components/ui/GradiantBgWrapper"; +import TextInput from "../components/actions/TextInput"; +import Checkbox from "../components/actions/CheckBox"; +import MovieCard from "../components/ui/Cards/MovieCard"; const BrowsePage = () => { - const home: any = useLoaderData(); + const browse: any = useLoaderData(); + return ( - -
-
+ +
+
+
+
+
Search
+ +
+
+
+
Card View
+ + +
+
+
+
Media Type
+ + +
+
+
+
Collections
+ + +
+
+
+
Genres
+
+ + + + + + +
+
+
+
+
+
+
+ Browse +
+
+
+ {browse && + browse.categories[0].data && + browse.categories[0].data.map((item: any) => ( + + ))} +
+
); diff --git a/src/lib/pages/HomePage.tsx b/src/lib/pages/HomePage.tsx index bbe5260..9d42f06 100644 --- a/src/lib/pages/HomePage.tsx +++ b/src/lib/pages/HomePage.tsx @@ -29,11 +29,11 @@ const HomePage = () => { return ( - +
-
+ {/*
Continue Watching
@@ -42,23 +42,20 @@ const HomePage = () => { ))}
-
+ */}
- - - + + +
- - - + {home.categories.map((category: any, index: any) => ( + + ))}
diff --git a/src/lib/pages/MovieInfoPage.tsx b/src/lib/pages/MovieInfoPage.tsx index 233deb3..a1053cb 100644 --- a/src/lib/pages/MovieInfoPage.tsx +++ b/src/lib/pages/MovieInfoPage.tsx @@ -14,9 +14,7 @@ const MovieInfoPage = () => { const colors = useImageColors(`${APP_API_PATHS.image}${movie.backdrop_path}`); - console.log(colors); - - if (Object.keys(colors).length === 0) return <>Loading...; + if (colors && Object.keys(colors).length === 0) return <>Loading...; return ( { const [currentSeason, setCurrentSeason] = useState(initialSeason); - return ( - +
- +
{
-
+
@@ -108,7 +107,7 @@ const TvInfoPage = () => {
-
+
{ alt="" />
-
+
{tv.seasons[currentSeason]?.season_number}.{" "} {tv.seasons[currentSeason]?.name} diff --git a/ts/.env b/ts/.env deleted file mode 100644 index f52a939..0000000 --- a/ts/.env +++ /dev/null @@ -1 +0,0 @@ -TMDB_KEY=00c699ffea6b6bd14ea07df6631ca17f \ No newline at end of file diff --git a/ts/data/bookmarks.json b/ts/data/bookmarks.json deleted file mode 100644 index e3e26c9..0000000 --- a/ts/data/bookmarks.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "languages": ["English", "Spanish", "Chinese", "Japanese", "Hindi"], - "subtitles": ["English", "Spanish", "Chinese", "Japanese", "Hindi"], - "years": [2000, 2001, 2003, 2005, 2009, 2010], - "countries_of_origin": ["EU", "USA", "JAP", "IN"], - "genres": ["Action", "Adventure", "Horror", "Thriller"], - "types": ["movie", "tv", "music", "other"], - "categories": [ - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1022789, - "type:": "movie", - "title": "Inside Out 2", - "genre": ["Animation", "Family", "Adventure", "Comedy"], - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Released", - "country_of_origin": "" - } - ] - }, - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1234456, - "type:": "movie", - "title": "Title of the Movie", - "genre": "", - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Ongoing", - "country_of_origin": "" - } - ] - }, - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1234456, - "type:": "movie", - "title": "Title of the Movie", - "genre": "", - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Ongoing", - "country_of_origin": "" - } - ] - }, - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1234456, - "type:": "movie", - "title": "Title of the Movie", - "genre": "", - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Ongoing", - "country_of_origin": "" - } - ] - }, - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1234456, - "type:": "movie", - "title": "Title of the Movie", - "genre": "", - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Ongoing", - "country_of_origin": "" - } - ] - }, - { - "id": 1234, - "title": "Bookmarks", - "items": [ - { - "id": 1234456, - "type:": "movie", - "title": "Title of the Movie", - "genre": "", - "available_language": ["Eng", "Spanish"], - "available_subtitles": ["Eng", "Spanish"], - "year": 2020, - "airing_status": "Ongoing", - "country_of_origin": "" - } - ] - } - ] -} diff --git a/ts/data/collections.json b/ts/data/collections.json deleted file mode 100644 index 879e576..0000000 --- a/ts/data/collections.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "id": 1, - "title": "Netflix", - "count": 10, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Netflix_2015_logo.svg/1597px-Netflix_2015_logo.svg.png?20190206123158", - "backdrop": "https://image.tmdb.org/t/p/w1280/56v2KjBlU4XaOv9rVYEQypROD7P.jpg" - }, - { - "id": 2, - "title": "HBO", - "count": 21, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/de/HBO_logo.svg/1024px-HBO_logo.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/2OMB0ynKlyIenMJWI2Dy9IWT4c.jpg" - }, - { - "id": 3, - "title": "Amazon Prime", - "count": 8, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Amazon_Prime_Logo.svg/640px-Amazon_Prime_Logo.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/thLAoL6VeZGmCyDpCOeoxLvA8yS.jpg" - }, - { - "id": 4, - "title": "Crunchyroll", - "count": 10, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Crunchyroll.svg/1024px-Crunchyroll.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/9mrSx9MVmNOOlvcPxDTdf1APzud.jpg" - } -] diff --git a/ts/data/home.json b/ts/data/home.json deleted file mode 100644 index 160eee4..0000000 --- a/ts/data/home.json +++ /dev/null @@ -1,386 +0,0 @@ -{ - "main_slider": [ - { - "backdrop_path": "/921vUyXdfIYpaXqu5Lnf3nVb4IJ.jpg", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 28, - "name": "Action" - }, - { - "id": 14, - "name": "Fantasy" - } - ], - "id": 810693, - "origin_country": ["JP"], - "original_language": "ja", - "original_title": "劇場版 呪術廻戦 0", - "overview": "Yuta Okkotsu is a nervous high school student who is suffering from a serious problem—his childhood friend Rika has turned into a curse and won't leave him alone. Since Rika is no ordinary curse, his plight is noticed by Satoru Gojo, a teacher at Jujutsu High, a school where fledgling exorcists learn how to combat curses. Gojo convinces Yuta to enroll, but can he learn enough in time to confront the curse that haunts him?", - "poster_path": "/23oJaeBh0FDk2mQ2P240PU9Xxfh.jpg", - "production_companies": [ - { - "id": 21444, - "logo_path": "/wSejGn3lAZdQ5muByxvzigwyDY6.png", - "name": "MAPPA", - "origin_country": "JP" - }, - { - "id": 2918, - "logo_path": "/gyEWUBWwqrm3H5T2hkERD9LxpOq.png", - "name": "Shueisha", - "origin_country": "JP" - }, - { - "id": 158200, - "logo_path": "/rf4ZArxPuqx5hdeU7rPIU8IQlYx.png", - "name": "Sumzap", - "origin_country": "JP" - }, - { - "id": 3363, - "logo_path": "/sj3vD7n63bTCih7bcf6GnWvRf1Q.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 882, - "logo_path": "/fRSWWjquvzcHjACbtF53utZFIll.png", - "name": "TOHO", - "origin_country": "JP" - } - ], - "release_date": "2021-12-24", - "runtime": 105, - "tagline": "Love is a twisted curse.", - "title": "Jujutsu Kaisen 0", - "video": false, - "vote_average": 8.179, - "vote_count": 1332, - "colors": { - "color1": [155, 136, 69], - "color2": [207, 198, 122], - "color3": [177, 158, 86] - } - }, - { - "backdrop_path": "/ilRyazdMJwN05exqhwK4tMKBYZs.jpg", - "belongs_to_collection": { - "id": 422837, - "name": "Blade Runner Collection", - "poster_path": "/qTcATCpiFDcgY8snQIfS2j0bFP7.jpg", - "backdrop_path": "/bSHZIvLoPBWyGLeiAudN1mXdvQX.jpg" - }, - "genres": [ - { - "id": 878, - "name": "Science Fiction" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "http://bladerunnermovie.com/", - "id": 335984, - "imdb_id": "tt1856101", - "origin_country": ["US"], - "original_language": "en", - "original_title": "Blade Runner 2049", - "overview": "Thirty years after the events of the first film, a new blade runner, LAPD Officer K, unearths a long-buried secret that has the potential to plunge what's left of society into chaos. K's discovery leads him on a quest to find Rick Deckard, a former LAPD blade runner who has been missing for 30 years.", - "popularity": 187.781, - "poster_path": "/gajva2L0rPYkEWjzgFlBXCAVBE5.jpg", - "production_companies": [ - { - "id": 1088, - "logo_path": "/9WOE5AQUXbOtLU6GTwfjS8OMF0v.png", - "name": "Alcon Entertainment", - "origin_country": "US" - }, - { - "id": 5, - "logo_path": "/71BqEFAF4V3qjjMPCpLuyJFB9A.png", - "name": "Columbia Pictures", - "origin_country": "US" - }, - { - "id": 1645, - "logo_path": "/6Ry6uNBaa0IbbSs1XYIgX5DkA9r.png", - "name": "Scott Free Productions", - "origin_country": "GB" - }, - { - "id": 57043, - "logo_path": null, - "name": "Bud Yorkin Productions", - "origin_country": "US" - }, - { - "id": 79529, - "logo_path": "/gVN3k8emmKy4iV4KREWcCtxusZK.png", - "name": "Torridon Films", - "origin_country": "US" - }, - { - "id": 101829, - "logo_path": "/8IOjCvgjq0zTrtP91cWD3kL2jMK.png", - "name": "16:14 Entertainment", - "origin_country": "US" - }, - { - "id": 78028, - "logo_path": "/sTFcDFfJaSVT3sv3DoaZDE4SlGB.png", - "name": "Thunderbird Entertainment", - "origin_country": "CA" - } - ], - "production_countries": [ - { - "iso_3166_1": "CA", - "name": "Canada" - }, - { - "iso_3166_1": "GB", - "name": "United Kingdom" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "2017-10-04", - "revenue": 259239658, - "runtime": 164, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Finnish", - "iso_639_1": "fi", - "name": "suomi" - }, - { - "english_name": "Hungarian", - "iso_639_1": "hu", - "name": "Magyar" - }, - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - }, - { - "english_name": "Russian", - "iso_639_1": "ru", - "name": "Pусский" - }, - { - "english_name": "Somali", - "iso_639_1": "so", - "name": "Somali" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - } - ], - "status": "Released", - "tagline": "The key to the future is finally unearthed.", - "title": "Blade Runner 2049", - "video": false, - "vote_average": 7.562, - "vote_count": 13306, - "colors": { - "color1": [254, 162, 27], - "color2": [247, 145, 24], - "color3": [249, 148, 24] - } - }, - { - "backdrop_path": "/xFxk4vnirOtUxpOEWgA1MCRfy6J.jpg", - "belongs_to_collection": null, - "genres": [ - { - "id": 10751, - "name": "Family" - }, - { - "id": 16, - "name": "Animation" - }, - { - "id": 12, - "name": "Adventure" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 14, - "name": "Fantasy" - } - ], - "homepage": "https://movies.disney.com/onward", - "id": 508439, - "imdb_id": "tt7146812", - "origin_country": ["US"], - "original_language": "en", - "original_title": "Onward", - "overview": "In a suburban fantasy world, two teenage elf brothers embark on an extraordinary quest to discover if there is still a little magic left out there.", - "popularity": 59.237, - "poster_path": "/f4aul3FyD3jv3v4bul1IrkWZvzq.jpg", - "production_companies": [ - { - "id": 2, - "logo_path": "/wdrCwmRnLFJhEoH8GSfymY85KHT.png", - "name": "Walt Disney Pictures", - "origin_country": "US" - }, - { - "id": 3, - "logo_path": "/1TjvGVDMYsj6JBxOAkUHpPEwLf7.png", - "name": "Pixar", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "2020-02-29", - "revenue": 141940042, - "runtime": 103, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Their quest begineth.", - "title": "Onward", - "video": false, - "vote_average": 7.69, - "vote_count": 6014, - "colors": { - "color1": [72, 76, 151], - "color2": [75, 78, 159], - "color3": [68, 67, 145] - } - }, - { - "backdrop_path": "/7RyHsO4yDXtBv1zUU3mTpHeQ0d5.jpg", - "belongs_to_collection": { - "id": 86311, - "name": "The Avengers Collection", - "poster_path": "/yFSIUVTCvgYrpalUktulvk3Gi5Y.jpg", - "backdrop_path": "/zuW6fOiusv4X9nnW3paHGfXcSll.jpg" - }, - "genres": [ - { - "id": 12, - "name": "Adventure" - }, - { - "id": 878, - "name": "Science Fiction" - }, - { - "id": 28, - "name": "Action" - } - ], - "id": 299534, - "origin_country": ["US"], - "original_language": "en", - "original_title": "Avengers: Endgame", - "overview": "After the devastating events of Avengers: Infinity War, the universe is in ruins due to the efforts of the Mad Titan, Thanos. With the help of remaining allies, the Avengers must assemble once more in order to undo Thanos' actions and restore order to the universe once and for all, no matter what consequences may be in store.", - "poster_path": "/or06FN3Dka5tukK1e9sl16pB3iy.jpg", - "production_companies": [ - { - "id": 420, - "logo_path": "/hUzeosd33nzE5MCNsZxCGEKTXaQ.png", - "name": "Marvel Studios", - "origin_country": "US" - } - ], - "release_date": "2019-04-24", - "runtime": 181, - "status": "Released", - "tagline": "Avenge the fallen.", - "title": "Avengers: Endgame", - "vote_average": 8.254, - "vote_count": 25131, - "colors": { - "color1": [250, 252, 231], - "color2": [46, 50, 79], - "color3": [90, 98, 121] - } - } - ], - "collections": [ - { - "id": 1, - "title": "Netflix", - "count": 10, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Netflix_2015_logo.svg/1597px-Netflix_2015_logo.svg.png?20190206123158", - "backdrop": "https://image.tmdb.org/t/p/w1280/56v2KjBlU4XaOv9rVYEQypROD7P.jpg" - }, - { - "id": 2, - "title": "HBO", - "count": 21, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/de/HBO_logo.svg/1024px-HBO_logo.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/2OMB0ynKlyIenMJWI2Dy9IWT4c.jpg" - }, - { - "id": 3, - "title": "Amazon Prime", - "count": 8, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Amazon_Prime_Logo.svg/640px-Amazon_Prime_Logo.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/thLAoL6VeZGmCyDpCOeoxLvA8yS.jpg" - }, - { - "id": 4, - "title": "Crunchyroll", - "count": 10, - "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Crunchyroll.svg/1024px-Crunchyroll.svg.png", - "backdrop": "https://image.tmdb.org/t/p/w1280/9mrSx9MVmNOOlvcPxDTdf1APzud.jpg" - } - ], - "continue_watching": [ - { - "id": 810693, - "title": "Jujutsu Kaisen 0", - "backdrop_path": "/921vUyXdfIYpaXqu5Lnf3nVb4IJ.jpg", - "watch_duration": "10:20", - "total_duration": "1:46:21" - }, - { - "id": 335984, - "title": "Blade Runner 2049", - "backdrop_path": "/ilRyazdMJwN05exqhwK4tMKBYZs.jpg", - "watch_duration": "58:18", - "total_duration": "2:39:11" - }, - { - "id": 508439, - "title": "Onward", - "backdrop_path": "/xFxk4vnirOtUxpOEWgA1MCRfy6J.jpg", - "watch_duration": "1:20:20", - "total_duration": "1:54:32" - } - ] -} diff --git a/ts/index.js b/ts/index.js deleted file mode 100644 index 54ec899..0000000 --- a/ts/index.js +++ /dev/null @@ -1,403 +0,0 @@ -import express from "express"; -import * as dotenv from "dotenv"; -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; -import cors from "cors"; - -dotenv.config(); - -const app = express(); -const port = 3003; -const CACHE_DURATION = 60 * 60 * 1000; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const TMP_DIR = path.resolve(__dirname, "tmp"); - -// Ensure the 'tmp' folder exists -if (!fs.existsSync(TMP_DIR)) { - fs.mkdirSync(TMP_DIR); -} - -const MOVIES_CACHE_FILE = path.resolve(TMP_DIR, "movies.json"); -const TV_CACHE_FILE = path.resolve(TMP_DIR, "tv.json"); -const HOME_DATA = path.resolve(__dirname, "data", "home.json"); -const COLLECTIONS_DATA = path.resolve(__dirname, "data", "collections.json"); -const BOOKMARK_DATA = path.resolve(__dirname, "data", "bookmarks.json"); - -const TMDB_API_KEY = process.env.TMDB_KEY; - -if (!TMDB_API_KEY) { - throw new Error("TMDB API key not found in environment variables"); -} - -const fetchAndUpdateCache = async (url, cacheFile, type) => { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`TMDB API error: ${response.statusText}`); - } - - const data = await response.json(); - const ids = data.results.map((item) => item.id); - - const detailsPromises = ids.map(async (id) => { - try { - const itemResponse = await fetch( - `https://api.themoviedb.org/3/${type}/${id}?api_key=${TMDB_API_KEY}` - ); - if (!itemResponse.ok) { - if (itemResponse.status === 404) { - console.warn(`ID ${id} not found, skipping.`); - return null; - } - throw new Error(`Error fetching ID ${id}: ${itemResponse.statusText}`); - } - return itemResponse.json(); - } catch (error) { - console.error(error.message); - return null; - } - }); - - const details = (await Promise.all(detailsPromises)).filter( - (detail) => detail !== null - ); - - fs.writeFileSync(cacheFile, JSON.stringify(details, null, 2)); - return details; -}; - -const getCachedData = (cacheFile) => { - if (fs.existsSync(cacheFile)) { - const stats = fs.statSync(cacheFile); - const now = Date.now(); - const modifiedTime = new Date(stats.mtime).getTime(); - - if (now - modifiedTime < CACHE_DURATION) { - const data = fs.readFileSync(cacheFile, "utf-8"); - return JSON.parse(data); - } - } - return null; -}; - -const fetchData = async (url, cacheFile, type) => { - const cachedData = getCachedData(cacheFile); - if (cachedData) { - return cachedData; - } - - return fetchAndUpdateCache(url, cacheFile, type); -}; - -app.use(cors()); - -app.use(express.json()); - -app.get("/movies", async (req, res) => { - try { - const url = `https://api.themoviedb.org/3/movie/top_rated?api_key=${TMDB_API_KEY}&language=en-US`; - const movieDetails = await fetchData(url, MOVIES_CACHE_FILE, "movie"); - res.json(movieDetails); - } catch (error) { - console.error("Error fetching data:", error); - res.status(500).json({ error: error.message }); - } -}); - -app.get("/movie/:id", async (req, res) => { - const { id } = req.params; - - const movieUrl = `https://api.themoviedb.org/3/movie/${id}?api_key=${TMDB_API_KEY}&language=en-US`; - const creditsUrl = `https://api.themoviedb.org/3/movie/${id}/credits?api_key=${TMDB_API_KEY}&language=en-US`; - - try { - const [movieResponse, creditsResponse] = await Promise.all([ - fetch(movieUrl), - fetch(creditsUrl), - ]); - - const checkResponseStatus = (response, type) => { - if (!response.ok) { - const errorMessage = `TMDB API error (${type}): ${response.statusText} (status: ${response.status})`; - console.error(errorMessage); - res.status(response.status).json({ error: errorMessage }); - throw new Error(errorMessage); - } - }; - - checkResponseStatus(movieResponse, "Movie"); - checkResponseStatus(creditsResponse, "Credits"); - - const movieData = await movieResponse.json(); - const creditsData = await creditsResponse.json(); - - if (!movieData || !creditsData) { - const errorMessage = "Incomplete data received from TMDB API"; - console.error(errorMessage); - return res.status(500).json({ error: errorMessage }); - } - - const responseData = { - ...movieData, - credits: creditsData, - }; - - console.log("Successfully fetched season and credits data"); - - res.setHeader("Content-Type", "application/json"); - res.json(responseData); - } catch (error) { - console.error("Error fetching data:", error); - res.status(500).json({ error: "Internal Server Error" }); - } -}); - -app.get("/tv", async (req, res) => { - try { - const url = `https://api.themoviedb.org/3/tv/top_rated?api_key=${TMDB_API_KEY}&language=en-US`; - const tvDetails = await fetchData(url, TV_CACHE_FILE, "tv"); - res.json(tvDetails); - } catch (error) { - console.error("Error fetching data:", error); - res.status(500).json({ error: error.message }); - } -}); - -app.get("/tv/:id", async (req, res) => { - const { id } = req.params; - - const tvUrl = `https://api.themoviedb.org/3/tv/${id}?api_key=${TMDB_API_KEY}&language=en-US`; - const creditsUrl = `https://api.themoviedb.org/3/tv/${id}/aggregate_credits?api_key=${TMDB_API_KEY}&language=en-US`; - - try { - const [tvResponse, creditsResponse] = await Promise.all([ - fetch(tvUrl), - fetch(creditsUrl), - ]); - - const checkResponseStatus = (response, type) => { - if (!response.ok) { - const errorMessage = `TMDB API error (${type}): ${response.statusText} (status: ${response.status})`; - console.error(errorMessage); - res.status(response.status).json({ error: errorMessage }); - throw new Error(errorMessage); - } - }; - - checkResponseStatus(tvResponse, "Tv"); - checkResponseStatus(creditsResponse, "Credits"); - - const tvData = await tvResponse.json(); - const creditsData = await creditsResponse.json(); - - if (!tvData || !creditsData) { - const errorMessage = "Incomplete data received from TMDB API"; - console.error(errorMessage); - return res.status(500).json({ error: errorMessage }); - } - - const responseData = { - ...tvData, - credits: creditsData, - }; - - console.log("Successfully fetched season and credits data"); - - res.setHeader("Content-Type", "application/json"); - res.json(responseData); - } catch (error) { - console.error("Error fetching data:", error); - res.status(500).json({ error: "Internal Server Error" }); - } -}); - -app.get("/tv/:id/season/:season_number", async (req, res) => { - const { id, season_number } = req.params; - const seasonUrl = `https://api.themoviedb.org/3/tv/${id}/season/${season_number}?api_key=${TMDB_API_KEY}&language=en-US`; - const creditsUrl = `https://api.themoviedb.org/3/tv/${id}/season/${season_number}/credits?api_key=${TMDB_API_KEY}&language=en-US`; - - try { - const [seasonResponse, creditsResponse] = await Promise.all([ - fetch(seasonUrl), - fetch(creditsUrl), - ]); - - const checkResponseStatus = (response, type) => { - if (!response.ok) { - const errorMessage = `TMDB API error (${type}): ${response.statusText} (status: ${response.status})`; - console.error(errorMessage); - res.status(response.status).json({ error: errorMessage }); - throw new Error(errorMessage); - } - }; - - checkResponseStatus(seasonResponse, "Season"); - checkResponseStatus(creditsResponse, "Credits"); - - const seasonData = await seasonResponse.json(); - const creditsData = await creditsResponse.json(); - - if (!seasonData || !creditsData) { - const errorMessage = "Incomplete data received from TMDB API"; - console.error(errorMessage); - return res.status(500).json({ error: errorMessage }); - } - - const responseData = { - ...seasonData, - credits: creditsData, - }; - - console.log("Successfully fetched season and credits data"); - - res.setHeader("Content-Type", "application/json"); - res.json(responseData); - } catch (error) { - console.error("Error fetching data:", error); - res.status(500).json({ error: "Internal Server Error" }); - } -}); - -app.get("/home", (req, res) => { - try { - const data = fs.readFileSync(HOME_DATA, "utf8"); - res.json(JSON.parse(data)); - } catch (error) { - console.error("Error reading collections data:", error); - res.status(500).json({ error: error.message }); - } -}); - -app.patch("/home", async (req, res) => { - const { tmdbId, colors } = req.body; - const { update } = req.query; - - if (update !== "main_slider") { - return res.status(400).json({ error: "Invalid update query parameter" }); - } - - if (!colors || Object.keys(colors).length === 0) { - return res.status(400).json({ error: "Colors object is empty" }); - } - - try { - const data = fs.readFileSync(HOME_DATA, "utf8"); - let currentData = JSON.parse(data); - let objectsArray = currentData.main_slider; - - const objIndex = objectsArray.findIndex((obj) => obj.id === tmdbId); - if (objIndex === -1) { - return res.status(404).json({ error: "Object not found" }); - } - - if ( - objectsArray[objIndex].colors && - Object.keys(objectsArray[objIndex].colors).length > 0 - ) { - return res - .status(201) - .json({ message: "Colors object already exists and is not empty" }); - } - - objectsArray[objIndex].colors = colors; - - fs.writeFileSync(HOME_DATA, JSON.stringify(currentData, null, 2), "utf8"); - - return res.status(200).json({ - message: "Colors updated successfully", - updatedObject: objectsArray[objIndex], - }); - } catch (err) { - console.error(err); - return res.status(500).json({ error: "Internal Server Error" }); - } -}); - -app.get("/collections", (req, res) => { - try { - const data = fs.readFileSync(COLLECTIONS_DATA, "utf8"); - res.json(JSON.parse(data)); - } catch (error) { - console.error("Error reading collections data:", error); - res.status(500).json({ error: error.message }); - } -}); - -app.get("/image/:imageId", async (req, res) => { - const { imageId } = req.params; - - if (!imageId) { - return res.status(400).send("No image_id provided"); - } - - const imageUrl = `https://image.tmdb.org/t/p/original/${imageId}`; - - try { - const response = await fetch(imageUrl); - - if (!response.ok) { - console.error( - `Error fetching image: ${response.status} ${response.statusText}` - ); - res - .status(500) - .send( - `Error fetching image: ${response.status} ${response.statusText}` - ); - return; - } - - const contentType = response.headers.get("content-type"); - const buffer = await response.arrayBuffer(); - - res.set("Content-Type", contentType); - res.send(Buffer.from(buffer)); - } catch (error) { - console.error("Error fetching image:", error); - res.status(500).send("Error fetching image"); - } -}); - -app.get("/bookmark/:bookmarkId", (req, res) => { - const { bookmarkId } = req.params; - try { - const data = fs.readFileSync(BOOKMARK_DATA, "utf8"); - const bookmarks = JSON.parse(data.data); - const bookmark = bookmarks.find((b) => b.id === bookmarkId); - if (bookmark) { - res.json(bookmark); - } else { - res.status(404).json({ error: "Bookmark not found" }); - } - } catch (error) { - console.error("Error reading collections data:", error); - res.status(500).json({ error: error.message }); - } -}); - -app.keepAliveTimeout = 120 * 1000; -app.headersTimeout = 125 * 1000; - -app.listen(port, () => { - console.log(`Server is running on port ${port}`); -}); - -// Schedule cache updates every hour -setInterval(async () => { - try { - const movieUrl = `https://api.themoviedb.org/3/movie/top_rated?api_key=${TMDB_API_KEY}&language=en-US`; - await fetchAndUpdateCache(movieUrl, MOVIES_CACHE_FILE, "movie"); - - const tvUrl = `https://api.themoviedb.org/3/tv/top_rated?api_key=${TMDB_API_KEY}&language=en-US`; - await fetchAndUpdateCache(tvUrl, TV_CACHE_FILE, "tv"); - - console.log("Cache updated successfully."); - } catch (error) { - console.error("Error updating cache:", error); - } -}, CACHE_DURATION); - -export default app; diff --git a/ts/package.json b/ts/package.json deleted file mode 100644 index b42c581..0000000 --- a/ts/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "tempserver", - "version": "1.0.0", - "description": "", - "type": "module", - "main": "index.js", - "scripts": { - "start": "node index.js", - "dev": "nodemon index.js" - }, - "keywords": ["server"], - "author": "", - "license": "ISC", - "devDependencies": { - "@vercel/node": "^3.1.7", - "nodemon": "^3.1.2" - }, - "dependencies": { - "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.2" - } -} diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml deleted file mode 100644 index 9cfdf56..0000000 --- a/ts/pnpm-lock.yaml +++ /dev/null @@ -1,1935 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - cors: - specifier: ^2.8.5 - version: 2.8.5 - dotenv: - specifier: ^16.4.5 - version: 16.4.5 - express: - specifier: ^4.19.2 - version: 4.19.2 - devDependencies: - '@vercel/node': - specifier: ^3.1.7 - version: 3.1.7 - nodemon: - specifier: ^3.1.2 - version: 3.1.2 - -packages: - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@edge-runtime/format@2.2.1': - resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} - engines: {node: '>=16'} - - '@edge-runtime/node-utils@2.3.0': - resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} - engines: {node: '>=16'} - - '@edge-runtime/ponyfill@2.4.2': - resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} - engines: {node: '>=16'} - - '@edge-runtime/primitives@4.1.0': - resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} - engines: {node: '>=16'} - - '@edge-runtime/vm@3.2.0': - resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} - engines: {node: '>=16'} - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@mapbox/node-pre-gyp@1.0.11': - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@rollup/pluginutils@4.2.1': - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - - '@ts-morph/common@0.11.1': - resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@16.18.11': - resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} - - '@vercel/build-utils@8.2.2': - resolution: {integrity: sha512-+Nf/Yk3GeMI47L/g5KYEvsj7yqVkhb6vZqjxavUBRVPSsgJ7fuNVfYvvpFj/Y0BYysEF8XNUxKFuwGROiop/ow==} - - '@vercel/error-utils@2.0.2': - resolution: {integrity: sha512-Sj0LFafGpYr6pfCqrQ82X6ukRl5qpmVrHM/191kNYFqkkB9YkjlMAj6QcEsvCG259x4QZ7Tya++0AB85NDPbKQ==} - - '@vercel/nft@0.27.2': - resolution: {integrity: sha512-7LeioS1yE5hwPpQfD3DdH04tuugKjo5KrJk3yK5kAI3Lh76iSsK/ezoFQfzuT08X3ZASQOd1y9ePjLNI9+TxTQ==} - engines: {node: '>=16'} - hasBin: true - - '@vercel/node@3.1.7': - resolution: {integrity: sha512-EYSHEt0Up70cOlawkSzb5CFHyHoOMuJG9Q/hWU+4zIpnXefZSanR/oaZMd+UFoaAKDVryBz35FVV7gNo6HxX9A==} - - '@vercel/static-config@3.0.0': - resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} - - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - ajv@8.6.3: - resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - async-listen@3.0.0: - resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} - engines: {node: '>= 14'} - - async-listen@3.0.1: - resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} - engines: {node: '>= 14'} - - async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - - code-block-writer@10.1.1: - resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} - - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-hrtime@3.0.0: - resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} - engines: {node: '>=8'} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - - edge-runtime@2.5.9: - resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} - engines: {node: '>=16'} - hasBin: true - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - - esbuild-android-64@0.14.47: - resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - esbuild-android-arm64@0.14.47: - resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - esbuild-darwin-64@0.14.47: - resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - esbuild-darwin-arm64@0.14.47: - resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - esbuild-freebsd-64@0.14.47: - resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-arm64@0.14.47: - resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - esbuild-linux-32@0.14.47: - resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - esbuild-linux-64@0.14.47: - resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - esbuild-linux-arm64@0.14.47: - resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - esbuild-linux-arm@0.14.47: - resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - esbuild-linux-mips64le@0.14.47: - resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - esbuild-linux-ppc64le@0.14.47: - resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - esbuild-linux-riscv64@0.14.47: - resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - esbuild-linux-s390x@0.14.47: - resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - esbuild-netbsd-64@0.14.47: - resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - esbuild-openbsd-64@0.14.47: - resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - esbuild-sunos-64@0.14.47: - resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - esbuild-windows-32@0.14.47: - resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - esbuild-windows-64@0.14.47: - resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - esbuild-windows-arm64@0.14.47: - resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - esbuild@0.14.47: - resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} - engines: {node: '>=12'} - hasBin: true - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - json-schema-to-ts@1.6.4: - resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} - hasBin: true - - nodemon@3.1.2: - resolution: {integrity: sha512-/Ib/kloefDy+N0iRTxIUzyGcdW9lzlnca2Jsa5w73bs3npXjg+WInmiX6VY13mIb6SykkthYX/U5t0ukryGqBw==} - engines: {node: '>=10'} - hasBin: true - - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - - path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - time-span@4.0.0: - resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} - engines: {node: '>=10'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - touch@3.1.1: - resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} - hasBin: true - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - ts-morph@12.0.0: - resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} - - ts-node@10.9.1: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - ts-toolbelt@6.15.5: - resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - - undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - - undici@5.26.5: - resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} - engines: {node: '>=14.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - -snapshots: - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@edge-runtime/format@2.2.1': {} - - '@edge-runtime/node-utils@2.3.0': {} - - '@edge-runtime/ponyfill@2.4.2': {} - - '@edge-runtime/primitives@4.1.0': {} - - '@edge-runtime/vm@3.2.0': - dependencies: - '@edge-runtime/primitives': 4.1.0 - - '@fastify/busboy@2.1.1': {} - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@mapbox/node-pre-gyp@1.0.11': - dependencies: - detect-libc: 2.0.3 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.6.9 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.6.2 - tar: 6.2.1 - transitivePeerDependencies: - - encoding - - supports-color - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@rollup/pluginutils@4.2.1': - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - - '@ts-morph/common@0.11.1': - dependencies: - fast-glob: 3.3.2 - minimatch: 3.1.2 - mkdirp: 1.0.4 - path-browserify: 1.0.1 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/json-schema@7.0.15': {} - - '@types/node@16.18.11': {} - - '@vercel/build-utils@8.2.2': {} - - '@vercel/error-utils@2.0.2': {} - - '@vercel/nft@0.27.2': - dependencies: - '@mapbox/node-pre-gyp': 1.0.11 - '@rollup/pluginutils': 4.2.1 - acorn: 8.11.3 - acorn-import-attributes: 1.9.5(acorn@8.11.3) - async-sema: 3.1.1 - bindings: 1.5.0 - estree-walker: 2.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - micromatch: 4.0.7 - node-gyp-build: 4.8.1 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - '@vercel/node@3.1.7': - dependencies: - '@edge-runtime/node-utils': 2.3.0 - '@edge-runtime/primitives': 4.1.0 - '@edge-runtime/vm': 3.2.0 - '@types/node': 16.18.11 - '@vercel/build-utils': 8.2.2 - '@vercel/error-utils': 2.0.2 - '@vercel/nft': 0.27.2 - '@vercel/static-config': 3.0.0 - async-listen: 3.0.0 - cjs-module-lexer: 1.2.3 - edge-runtime: 2.5.9 - es-module-lexer: 1.4.1 - esbuild: 0.14.47 - etag: 1.8.1 - node-fetch: 2.6.9 - path-to-regexp: 6.2.1 - ts-morph: 12.0.0 - ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) - typescript: 4.9.5 - undici: 5.26.5 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - encoding - - supports-color - - '@vercel/static-config@3.0.0': - dependencies: - ajv: 8.6.3 - json-schema-to-ts: 1.6.4 - ts-morph: 12.0.0 - - abbrev@1.1.1: {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-import-attributes@1.9.5(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - - acorn-walk@8.3.2: {} - - acorn@8.11.3: {} - - agent-base@6.0.2: - dependencies: - debug: 4.3.5(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - - ajv@8.6.3: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - aproba@2.0.0: {} - - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - - arg@4.1.3: {} - - array-flatten@1.1.1: {} - - async-listen@3.0.0: {} - - async-listen@3.0.1: {} - - async-sema@3.1.1: {} - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - body-parser@1.20.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - bytes@3.1.2: {} - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chownr@2.0.0: {} - - cjs-module-lexer@1.2.3: {} - - code-block-writer@10.1.1: {} - - color-support@1.1.3: {} - - concat-map@0.0.1: {} - - console-control-strings@1.1.0: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-hrtime@3.0.0: {} - - cookie-signature@1.0.6: {} - - cookie@0.6.0: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - create-require@1.1.1: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.3.5(supports-color@5.5.0): - dependencies: - ms: 2.1.2 - optionalDependencies: - supports-color: 5.5.0 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - delegates@1.0.0: {} - - depd@2.0.0: {} - - destroy@1.2.0: {} - - detect-libc@2.0.3: {} - - diff@4.0.2: {} - - dotenv@16.4.5: {} - - edge-runtime@2.5.9: - dependencies: - '@edge-runtime/format': 2.2.1 - '@edge-runtime/ponyfill': 2.4.2 - '@edge-runtime/vm': 3.2.0 - async-listen: 3.0.1 - mri: 1.2.0 - picocolors: 1.0.0 - pretty-ms: 7.0.1 - signal-exit: 4.0.2 - time-span: 4.0.0 - - ee-first@1.1.1: {} - - emoji-regex@8.0.0: {} - - encodeurl@1.0.2: {} - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-module-lexer@1.4.1: {} - - esbuild-android-64@0.14.47: - optional: true - - esbuild-android-arm64@0.14.47: - optional: true - - esbuild-darwin-64@0.14.47: - optional: true - - esbuild-darwin-arm64@0.14.47: - optional: true - - esbuild-freebsd-64@0.14.47: - optional: true - - esbuild-freebsd-arm64@0.14.47: - optional: true - - esbuild-linux-32@0.14.47: - optional: true - - esbuild-linux-64@0.14.47: - optional: true - - esbuild-linux-arm64@0.14.47: - optional: true - - esbuild-linux-arm@0.14.47: - optional: true - - esbuild-linux-mips64le@0.14.47: - optional: true - - esbuild-linux-ppc64le@0.14.47: - optional: true - - esbuild-linux-riscv64@0.14.47: - optional: true - - esbuild-linux-s390x@0.14.47: - optional: true - - esbuild-netbsd-64@0.14.47: - optional: true - - esbuild-openbsd-64@0.14.47: - optional: true - - esbuild-sunos-64@0.14.47: - optional: true - - esbuild-windows-32@0.14.47: - optional: true - - esbuild-windows-64@0.14.47: - optional: true - - esbuild-windows-arm64@0.14.47: - optional: true - - esbuild@0.14.47: - optionalDependencies: - esbuild-android-64: 0.14.47 - esbuild-android-arm64: 0.14.47 - esbuild-darwin-64: 0.14.47 - esbuild-darwin-arm64: 0.14.47 - esbuild-freebsd-64: 0.14.47 - esbuild-freebsd-arm64: 0.14.47 - esbuild-linux-32: 0.14.47 - esbuild-linux-64: 0.14.47 - esbuild-linux-arm: 0.14.47 - esbuild-linux-arm64: 0.14.47 - esbuild-linux-mips64le: 0.14.47 - esbuild-linux-ppc64le: 0.14.47 - esbuild-linux-riscv64: 0.14.47 - esbuild-linux-s390x: 0.14.47 - esbuild-netbsd-64: 0.14.47 - esbuild-openbsd-64: 0.14.47 - esbuild-sunos-64: 0.14.47 - esbuild-windows-32: 0.14.47 - esbuild-windows-64: 0.14.47 - esbuild-windows-arm64: 0.14.47 - - escape-html@1.0.3: {} - - estree-walker@2.0.2: {} - - etag@1.8.1: {} - - express@4.19.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.7 - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - file-uri-to-path@1.0.0: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.2.0: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gauge@3.0.2: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graceful-fs@4.2.11: {} - - has-flag@3.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-unicode@2.0.1: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.5(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - ignore-by-default@1.0.1: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ipaddr.js@1.9.1: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - json-schema-to-ts@1.6.4: - dependencies: - '@types/json-schema': 7.0.15 - ts-toolbelt: 6.15.5 - - json-schema-traverse@1.0.0: {} - - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - - make-error@1.3.6: {} - - media-typer@0.3.0: {} - - merge-descriptors@1.0.1: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp@1.0.4: {} - - mri@1.2.0: {} - - ms@2.0.0: {} - - ms@2.1.2: {} - - ms@2.1.3: {} - - negotiator@0.6.3: {} - - node-fetch@2.6.9: - dependencies: - whatwg-url: 5.0.0 - - node-gyp-build@4.8.1: {} - - nodemon@3.1.2: - dependencies: - chokidar: 3.6.0 - debug: 4.3.5(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 7.6.2 - simple-update-notifier: 2.0.0 - supports-color: 5.5.0 - touch: 3.1.1 - undefsafe: 2.0.5 - - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - - normalize-path@3.0.0: {} - - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - - object-assign@4.1.1: {} - - object-inspect@1.13.1: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - parse-ms@2.1.0: {} - - parseurl@1.3.3: {} - - path-browserify@1.0.1: {} - - path-is-absolute@1.0.1: {} - - path-to-regexp@0.1.7: {} - - path-to-regexp@6.2.1: {} - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - pretty-ms@7.0.1: - dependencies: - parse-ms: 2.1.0 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - pstree.remy@1.1.8: {} - - punycode@2.3.1: {} - - qs@6.11.0: - dependencies: - side-channel: 1.0.6 - - queue-microtask@1.2.3: {} - - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - require-from-string@2.0.2: {} - - resolve-from@5.0.0: {} - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - semver@6.3.1: {} - - semver@7.6.2: {} - - send@0.18.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-static@1.15.0: - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - - set-blocking@2.0.0: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - setprototypeof@1.2.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - - signal-exit@3.0.7: {} - - signal-exit@4.0.2: {} - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.6.2 - - statuses@2.0.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - time-span@4.0.0: - dependencies: - convert-hrtime: 3.0.0 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - touch@3.1.1: {} - - tr46@0.0.3: {} - - ts-morph@12.0.0: - dependencies: - '@ts-morph/common': 0.11.1 - code-block-writer: 10.1.1 - - ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.11 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - ts-toolbelt@6.15.5: {} - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typescript@4.9.5: {} - - undefsafe@2.0.5: {} - - undici@5.26.5: - dependencies: - '@fastify/busboy': 2.1.1 - - unpipe@1.0.0: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - util-deprecate@1.0.2: {} - - utils-merge@1.0.1: {} - - v8-compile-cache-lib@3.0.1: {} - - vary@1.1.2: {} - - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - - wrappy@1.0.2: {} - - yallist@4.0.0: {} - - yn@3.1.1: {} diff --git a/ts/tmp/movies.json b/ts/tmp/movies.json deleted file mode 100644 index 958d706..0000000 --- a/ts/tmp/movies.json +++ /dev/null @@ -1,1476 +0,0 @@ -[ - { - "adult": false, - "backdrop_path": "/avedvodAZUcwqevBfm8p4G2NziQ.jpg", - "belongs_to_collection": null, - "budget": 25000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "", - "id": 278, - "imdb_id": "tt0111161", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Shawshank Redemption", - "overview": "Imprisoned in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.", - "popularity": 186.619, - "poster_path": "/9cqNxx0GxF0bflZmeSMuL5tnGzr.jpg", - "production_companies": [ - { - "id": 97, - "logo_path": "/7znWcbDd4PcJzJUlJxYqAlPPykp.png", - "name": "Castle Rock Entertainment", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1994-09-23", - "revenue": 28341469, - "runtime": 142, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Fear can hold you prisoner. Hope can set you free.", - "title": "The Shawshank Redemption", - "video": false, - "vote_average": 8.705, - "vote_count": 26545 - }, - { - "adult": false, - "backdrop_path": "/tmU7GeKVybMWFButWEGl2M4GeiP.jpg", - "belongs_to_collection": { - "id": 230, - "name": "The Godfather Collection", - "poster_path": "/zqV8MGXfpLZiFVObLxpAI7wWonJ.jpg", - "backdrop_path": "/mDMCET9Ens5ANvZAWRpluBsMAtS.jpg" - }, - "budget": 6000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "http://www.thegodfather.com/", - "id": 238, - "imdb_id": "tt0068646", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Godfather", - "overview": "Spanning the years 1945 to 1955, a chronicle of the fictional Italian-American Corleone crime family. When organized crime family patriarch, Vito Corleone barely survives an attempt on his life, his youngest son, Michael steps in to take care of the would-be killers, launching a campaign of bloody revenge.", - "popularity": 319.105, - "poster_path": "/3bhkrj58Vtu7enYsRolD1fZdja1.jpg", - "production_companies": [ - { - "id": 4, - "logo_path": "/gz66EfNoYPqHTYI4q9UEN4CbHRc.png", - "name": "Paramount Pictures", - "origin_country": "US" - }, - { - "id": 10211, - "logo_path": null, - "name": "Alfran Productions", - "origin_country": "US" - }, - { - "id": 70, - "logo_path": "/ueaENQkPcy8rlr5fGZVBXKOhlBh.png", - "name": "American Zoetrope", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1972-03-14", - "revenue": 245066411, - "runtime": 175, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Italian", - "iso_639_1": "it", - "name": "Italiano" - }, - { - "english_name": "Latin", - "iso_639_1": "la", - "name": "Latin" - } - ], - "status": "Released", - "tagline": "An offer you can't refuse.", - "title": "The Godfather", - "video": false, - "vote_average": 8.691, - "vote_count": 20151 - }, - { - "adult": false, - "backdrop_path": "/kGzFbGhp99zva6oZODW5atUtnqi.jpg", - "belongs_to_collection": { - "id": 230, - "name": "The Godfather Collection", - "poster_path": "/zqV8MGXfpLZiFVObLxpAI7wWonJ.jpg", - "backdrop_path": "/mDMCET9Ens5ANvZAWRpluBsMAtS.jpg" - }, - "budget": 13000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "", - "id": 240, - "imdb_id": "tt0071562", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Godfather Part II", - "overview": "In the continuing saga of the Corleone crime family, a young Vito Corleone grows up in Sicily and in 1910s New York. In the 1950s, Michael Corleone attempts to expand the family business into Las Vegas, Hollywood and Cuba.", - "popularity": 165.551, - "poster_path": "/hek3koDUyRQk7FIhPXsa6mT2Zc3.jpg", - "production_companies": [ - { - "id": 4, - "logo_path": "/gz66EfNoYPqHTYI4q9UEN4CbHRc.png", - "name": "Paramount Pictures", - "origin_country": "US" - }, - { - "id": 536, - "logo_path": null, - "name": "The Coppola Company", - "origin_country": "US" - }, - { - "id": 70, - "logo_path": "/ueaENQkPcy8rlr5fGZVBXKOhlBh.png", - "name": "American Zoetrope", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1974-12-20", - "revenue": 102600000, - "runtime": 202, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Italian", - "iso_639_1": "it", - "name": "Italiano" - }, - { - "english_name": "Latin", - "iso_639_1": "la", - "name": "Latin" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - } - ], - "status": "Released", - "tagline": "The rise and fall of the Corleone empire.", - "title": "The Godfather Part II", - "video": false, - "vote_average": 8.574, - "vote_count": 12158 - }, - { - "adult": false, - "backdrop_path": "/zb6fM1CX41D9rF9hdgclu0peUmy.jpg", - "belongs_to_collection": null, - "budget": 22000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 36, - "name": "History" - }, - { - "id": 10752, - "name": "War" - } - ], - "homepage": "http://www.schindlerslist.com/", - "id": 424, - "imdb_id": "tt0108052", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "Schindler's List", - "overview": "The true story of how businessman Oskar Schindler saved over a thousand Jewish lives from the Nazis while they worked as slaves in his factory during World War II.", - "popularity": 122.323, - "poster_path": "/sF1U4EUQS8YHUYjNl3pMGNIQyr0.jpg", - "production_companies": [ - { - "id": 56, - "logo_path": "/cEaxANEisCqeEoRvODv2dO1I0iI.png", - "name": "Amblin Entertainment", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1993-12-15", - "revenue": 321365567, - "runtime": 195, - "spoken_languages": [ - { - "english_name": "German", - "iso_639_1": "de", - "name": "Deutsch" - }, - { - "english_name": "Polish", - "iso_639_1": "pl", - "name": "Polski" - }, - { - "english_name": "Hebrew", - "iso_639_1": "he", - "name": "עִבְרִית" - }, - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Whoever saves one life, saves the world entire.", - "title": "Schindler's List", - "video": false, - "vote_average": 8.566, - "vote_count": 15564 - }, - { - "adult": false, - "backdrop_path": "/qqHQsStV6exghCM7zbObuYBiYxw.jpg", - "belongs_to_collection": null, - "budget": 397751, - "genres": [ - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "", - "id": 389, - "imdb_id": "tt0050083", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "12 Angry Men", - "overview": "The defense and the prosecution have rested and the jury is filing into the jury room to decide if a young Spanish-American is guilty or innocent of murdering his father. What begins as an open and shut case soon becomes a mini-drama of each of the jurors' prejudices and preconceptions about the trial, the accused, and each other.", - "popularity": 115.694, - "poster_path": "/ow3wq89wM8qd5X7hWKxiRfsFf9C.jpg", - "production_companies": [ - { - "id": 60, - "logo_path": "/1SEj4nyG3JPBSKBbFhtdcHRaIF9.png", - "name": "United Artists", - "origin_country": "US" - }, - { - "id": 10212, - "logo_path": null, - "name": "Orion-Nova Productions", - "origin_country": "" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1957-04-10", - "revenue": 4360000, - "runtime": 97, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Life is in their hands — Death is on their minds!", - "title": "12 Angry Men", - "video": false, - "vote_average": 8.543, - "vote_count": 8412 - }, - { - "adult": false, - "backdrop_path": "/m4TUa2ciEWSlk37rOsjiSIvZDXE.jpg", - "belongs_to_collection": null, - "budget": 19000000, - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10751, - "name": "Family" - }, - { - "id": 14, - "name": "Fantasy" - } - ], - "homepage": "http://movies.disney.com/spirited-away", - "id": 129, - "imdb_id": "tt0245429", - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_title": "千と千尋の神隠し", - "overview": "A young girl, Chihiro, becomes trapped in a strange new world of spirits. When her parents undergo a mysterious transformation, she must call upon the courage she never knew she had to free her family.", - "popularity": 160.489, - "poster_path": "/39wmItIWsg5sZMyRUHLkWBcuVCM.jpg", - "production_companies": [ - { - "id": 10342, - "logo_path": "/eS79pslnoKbWg7t3PMA9ayl0bGs.png", - "name": "Studio Ghibli", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "release_date": "2001-04-18", - "revenue": 274925095, - "runtime": 125, - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Released", - "tagline": "", - "title": "Spirited Away", - "video": false, - "vote_average": 8.537, - "vote_count": 16169 - }, - { - "adult": false, - "backdrop_path": "/90ez6ArvpO8bvpyIngBuwXOqJm5.jpg", - "belongs_to_collection": null, - "budget": 13200000, - "genres": [ - { - "id": 35, - "name": "Comedy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10749, - "name": "Romance" - } - ], - "homepage": "", - "id": 19404, - "imdb_id": "tt0112870", - "origin_country": [ - "IN" - ], - "original_language": "hi", - "original_title": "दिलवाले दुल्हनिया ले जायेंगे", - "overview": "Raj is a rich, carefree, happy-go-lucky second generation NRI. Simran is the daughter of Chaudhary Baldev Singh, who in spite of being an NRI is very strict about adherence to Indian values. Simran has left for India to be married to her childhood fiancé. Raj leaves for India with a mission at his hands, to claim his lady love under the noses of her whole family. Thus begins a saga.", - "popularity": 95.594, - "poster_path": "/lfRkUr7DYdHldAqi3PwdQGBRBPM.jpg", - "production_companies": [ - { - "id": 1569, - "logo_path": "/lvzN86o3jrP44DIvn4SMBLOl9PF.png", - "name": "Yash Raj Films", - "origin_country": "IN" - } - ], - "production_countries": [ - { - "iso_3166_1": "IN", - "name": "India" - } - ], - "release_date": "1995-10-20", - "revenue": 100000000, - "runtime": 190, - "spoken_languages": [ - { - "english_name": "Hindi", - "iso_639_1": "hi", - "name": "हिन्दी" - } - ], - "status": "Released", - "tagline": "Come… Fall In love, All Over Again…", - "title": "Dilwale Dulhania Le Jayenge", - "video": false, - "vote_average": 8.536, - "vote_count": 4410 - }, - { - "adult": false, - "backdrop_path": "/dqK9Hag1054tghRQSqLSfrkvQnA.jpg", - "belongs_to_collection": { - "id": 263, - "name": "The Dark Knight Collection", - "poster_path": "/ogyw5LTmL53dVxsppcy8Dlm30Fu.jpg", - "backdrop_path": "/xfKot7lqaiW4XpL5TtDlVBA9ei9.jpg" - }, - "budget": 185000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 28, - "name": "Action" - }, - { - "id": 80, - "name": "Crime" - }, - { - "id": 53, - "name": "Thriller" - } - ], - "homepage": "https://www.warnerbros.com/movies/dark-knight/", - "id": 155, - "imdb_id": "tt0468569", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Dark Knight", - "overview": "Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.", - "popularity": 210.272, - "poster_path": "/qJ2tW6WMUDux911r6m7haRef0WH.jpg", - "production_companies": [ - { - "id": 429, - "logo_path": "/2Tc1P3Ac8M479naPp1kYT3izLS5.png", - "name": "DC", - "origin_country": "US" - }, - { - "id": 923, - "logo_path": "/8M99Dkt23MjQMTTWukq4m5XsEuo.png", - "name": "Legendary Pictures", - "origin_country": "US" - }, - { - "id": 9996, - "logo_path": "/3tvBqYsBhxWeHlu62SIJ1el93O7.png", - "name": "Syncopy", - "origin_country": "GB" - }, - { - "id": 118865, - "logo_path": null, - "name": "Isobel Griffiths", - "origin_country": "GB" - }, - { - "id": 174, - "logo_path": "/zhD3hhtKB5qyv7ZeL4uLpNxgMVU.png", - "name": "Warner Bros. Pictures", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "GB", - "name": "United Kingdom" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "2008-07-16", - "revenue": 1004558444, - "runtime": 152, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Mandarin", - "iso_639_1": "zh", - "name": "普通话" - } - ], - "status": "Released", - "tagline": "Welcome to a world without rules.", - "title": "The Dark Knight", - "video": false, - "vote_average": 8.5, - "vote_count": 32294 - }, - { - "adult": false, - "backdrop_path": "/8eihUxjQsJ7WvGySkVMC0EwbPAD.jpg", - "belongs_to_collection": null, - "budget": 11363000, - "genres": [ - { - "id": 35, - "name": "Comedy" - }, - { - "id": 53, - "name": "Thriller" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "https://www.parasite-movie.com/", - "id": 496243, - "imdb_id": "tt6751668", - "origin_country": [ - "KR" - ], - "original_language": "ko", - "original_title": "기생충", - "overview": "All unemployed, Ki-taek's family takes peculiar interest in the wealthy and glamorous Parks for their livelihood until they get entangled in an unexpected incident.", - "popularity": 140.39, - "poster_path": "/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg", - "production_companies": [ - { - "id": 4399, - "logo_path": "/rk3kE5QX2dQtH0pPwCHV12qfebg.png", - "name": "Barunson E&A", - "origin_country": "KR" - } - ], - "production_countries": [ - { - "iso_3166_1": "KR", - "name": "South Korea" - } - ], - "release_date": "2019-05-30", - "revenue": 257591776, - "runtime": 133, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "German", - "iso_639_1": "de", - "name": "Deutsch" - }, - { - "english_name": "Korean", - "iso_639_1": "ko", - "name": "한국어/조선말" - } - ], - "status": "Released", - "tagline": "Act like you own the place.", - "title": "Parasite", - "video": false, - "vote_average": 8.508, - "vote_count": 17827 - }, - { - "adult": false, - "backdrop_path": "/vxJ08SvwomfKbpboCWynC3uqUg4.jpg", - "belongs_to_collection": null, - "budget": 60000000, - "genres": [ - { - "id": 14, - "name": "Fantasy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "http://thegreenmile.warnerbros.com/", - "id": 497, - "imdb_id": "tt0120689", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Green Mile", - "overview": "A supernatural tale set on death row in a Southern prison, where gentle giant John Coffey possesses the mysterious power to heal people's ailments. When the cell block's head guard, Paul Edgecomb, recognizes Coffey's miraculous gift, he tries desperately to help stave off the condemned man's execution.", - "popularity": 132.073, - "poster_path": "/8VG8fDNiy50H4FedGwdSVUPoaJe.jpg", - "production_companies": [ - { - "id": 97, - "logo_path": "/7znWcbDd4PcJzJUlJxYqAlPPykp.png", - "name": "Castle Rock Entertainment", - "origin_country": "US" - }, - { - "id": 3982, - "logo_path": "/bli7HkPOXOEWsDwDK0W7XXfeUU2.png", - "name": "Darkwoods Productions", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1999-12-10", - "revenue": 286801374, - "runtime": 189, - "spoken_languages": [ - { - "english_name": "French", - "iso_639_1": "fr", - "name": "Français" - }, - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Paul Edgecomb didn't believe in miracles. Until the day he met one.", - "title": "The Green Mile", - "video": false, - "vote_average": 8.506, - "vote_count": 17052 - }, - { - "adult": false, - "backdrop_path": "/dIWwZW7dJJtqC6CgWzYkNVKIUm8.jpg", - "belongs_to_collection": null, - "budget": 0, - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10749, - "name": "Romance" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "https://www.funimationfilms.com/movie/yourname/", - "id": 372058, - "imdb_id": "tt5311514", - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_title": "君の名は。", - "overview": "High schoolers Mitsuha and Taki are complete strangers living separate lives. But one night, they suddenly switch places. Mitsuha wakes up in Taki’s body, and he in hers. This bizarre occurrence continues to happen randomly, and the two must adjust their lives around each other.", - "popularity": 143.299, - "poster_path": "/q719jXXEzOoYaps6babgKnONONX.jpg", - "production_companies": [ - { - "id": 3756, - "logo_path": "/t38uPdbKmyBB8brKKeTFWIwojRz.png", - "name": "CoMix Wave Films", - "origin_country": "JP" - }, - { - "id": 882, - "logo_path": "/fRSWWjquvzcHjACbtF53utZFIll.png", - "name": "TOHO", - "origin_country": "JP" - }, - { - "id": 2073, - "logo_path": "/tWxRSaKmRJNTcmtlXsmn5R4KOSU.png", - "name": "KADOKAWA", - "origin_country": "JP" - }, - { - "id": 8157, - "logo_path": "/pEqcMX1aG3JvtDgfh2wNZJLCcb4.png", - "name": "jeki", - "origin_country": "JP" - }, - { - "id": 14602, - "logo_path": "/t9eqx5QCHtu8LxxgYzivqrJAosp.png", - "name": "AMUSE", - "origin_country": "JP" - }, - { - "id": 128617, - "logo_path": null, - "name": "voque ting", - "origin_country": "JP" - }, - { - "id": 104184, - "logo_path": null, - "name": "Lawson Entertainment", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "release_date": "2016-08-26", - "revenue": 358000000, - "runtime": 106, - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Released", - "tagline": "Separated by distance, connected by fate.", - "title": "Your Name.", - "video": false, - "vote_average": 8.487, - "vote_count": 11145 - }, - { - "adult": false, - "backdrop_path": "/suaEOtk1N1sgg2MTM7oZd2cfVp3.jpg", - "belongs_to_collection": null, - "budget": 8500000, - "genres": [ - { - "id": 53, - "name": "Thriller" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "https://www.miramax.com/movie/pulp-fiction/", - "id": 680, - "imdb_id": "tt0110912", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "Pulp Fiction", - "overview": "A burger-loving hit man, his philosophical partner, a drug-addled gangster's moll and a washed-up boxer converge in this sprawling, comedic crime caper. Their adventures unfurl in three stories that ingeniously trip back and forth in time.", - "popularity": 147.481, - "poster_path": "/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg", - "production_companies": [ - { - "id": 14, - "logo_path": "/m6AHu84oZQxvq7n1rsvMNJIAsMu.png", - "name": "Miramax", - "origin_country": "US" - }, - { - "id": 59, - "logo_path": "/yH7OMeSxhfP0AVM6iT0rsF3F4ZC.png", - "name": "A Band Apart", - "origin_country": "US" - }, - { - "id": 216, - "logo_path": "/iKPzC6YxqNAk6fMoTtFhIF5p6yw.png", - "name": "Jersey Films", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1994-09-10", - "revenue": 213928762, - "runtime": 154, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - }, - { - "english_name": "French", - "iso_639_1": "fr", - "name": "Français" - } - ], - "status": "Released", - "tagline": "You won't know the facts until you've seen the fiction.", - "title": "Pulp Fiction", - "video": false, - "vote_average": 8.487, - "vote_count": 27440 - }, - { - "adult": false, - "backdrop_path": "/2u7zbn8EudG6kLlBzUYqP8RyFU4.jpg", - "belongs_to_collection": { - "id": 119, - "name": "The Lord of the Rings Collection", - "poster_path": "/oENY593nKRVL2PnxXsMtlh8izb4.jpg", - "backdrop_path": "/bccR2CGTWVVSZAG0yqmy3DIvhTX.jpg" - }, - "budget": 94000000, - "genres": [ - { - "id": 12, - "name": "Adventure" - }, - { - "id": 14, - "name": "Fantasy" - }, - { - "id": 28, - "name": "Action" - } - ], - "homepage": "http://www.lordoftherings.net", - "id": 122, - "imdb_id": "tt0167260", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "The Lord of the Rings: The Return of the King", - "overview": "As armies mass for a final battle that will decide the fate of the world--and powerful, ancient forces of Light and Dark compete to determine the outcome--one member of the Fellowship of the Ring is revealed as the noble heir to the throne of the Kings of Men. Yet, the sole hope for triumph over evil lies with a brave hobbit, Frodo, who, accompanied by his loyal friend Sam and the hideous, wretched Gollum, ventures deep into the very dark heart of Mordor on his seemingly impossible quest to destroy the Ring of Power.​", - "popularity": 144.021, - "poster_path": "/rCzpDGLbOoPwLjy3OAm5NUPOTrC.jpg", - "production_companies": [ - { - "id": 12, - "logo_path": "/2ycs64eqV5rqKYHyQK0GVoKGvfX.png", - "name": "New Line Cinema", - "origin_country": "US" - }, - { - "id": 11, - "logo_path": "/6FAuASQHybRkZUk08p9PzSs9ezM.png", - "name": "WingNut Films", - "origin_country": "NZ" - }, - { - "id": 5237, - "logo_path": "/mlnr7vsBHvLye8oEb5A76C0t8x9.png", - "name": "The Saul Zaentz Company", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "NZ", - "name": "New Zealand" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "2003-12-01", - "revenue": 1118888979, - "runtime": 201, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "There can be no triumph without loss. No victory without suffering. No freedom without sacrifice.", - "title": "The Lord of the Rings: The Return of the King", - "video": false, - "vote_average": 8.482, - "vote_count": 23696 - }, - { - "adult": false, - "backdrop_path": "/ghgfzbEV7kbpbi1O8eIILKVXEA8.jpg", - "belongs_to_collection": null, - "budget": 55000000, - "genres": [ - { - "id": 35, - "name": "Comedy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10749, - "name": "Romance" - } - ], - "homepage": "https://www.paramountmovies.com/movies/forrest-gump", - "id": 13, - "imdb_id": "tt0109830", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "Forrest Gump", - "overview": "A man with a low IQ has accomplished great things in his life and been present during significant historic events—in each case, far exceeding what anyone imagined he could do. But despite all he has achieved, his one true love eludes him.", - "popularity": 143.019, - "poster_path": "/arw2vcBveWOVZr6pxd9XTd1TdQa.jpg", - "production_companies": [ - { - "id": 4, - "logo_path": "/gz66EfNoYPqHTYI4q9UEN4CbHRc.png", - "name": "Paramount Pictures", - "origin_country": "US" - }, - { - "id": 21920, - "logo_path": null, - "name": "The Steve Tisch Company", - "origin_country": "" - }, - { - "id": 412, - "logo_path": null, - "name": "Wendy Finerman Productions", - "origin_country": "" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1994-06-23", - "revenue": 677387716, - "runtime": 142, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "The world will never be the same once you've seen it through the eyes of Forrest Gump.", - "title": "Forrest Gump", - "video": false, - "vote_average": 8.475, - "vote_count": 26943 - }, - { - "adult": false, - "backdrop_path": "/Adrip2Jqzw56KeuV2nAxucKMNXA.jpg", - "belongs_to_collection": null, - "budget": 1200000, - "genres": [ - { - "id": 37, - "name": "Western" - } - ], - "homepage": "http://www.mgm.com/#/our-titles/766/The-Good,-the-Bad-and-the-Ugly", - "id": 429, - "imdb_id": "tt0060196", - "origin_country": [ - "IT" - ], - "original_language": "it", - "original_title": "Il buono, il brutto, il cattivo", - "overview": "While the Civil War rages on between the Union and the Confederacy, three men – a quiet loner, a ruthless hitman, and a Mexican bandit – comb the American Southwest in search of a strongbox containing $200,000 in stolen gold.", - "popularity": 140.923, - "poster_path": "/bX2xnavhMYjWDoZp1VM6VnU1xwe.jpg", - "production_companies": [ - { - "id": 60, - "logo_path": "/1SEj4nyG3JPBSKBbFhtdcHRaIF9.png", - "name": "United Artists", - "origin_country": "US" - }, - { - "id": 7508, - "logo_path": null, - "name": "PEA", - "origin_country": "IT" - }, - { - "id": 42498, - "logo_path": null, - "name": "Arturo González Producciones Cinematográficas", - "origin_country": "ES" - }, - { - "id": 47, - "logo_path": "/i7Z9ot2o3N5Sa3HrF09kniFs2y8.png", - "name": "Constantin Film", - "origin_country": "DE" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - }, - { - "iso_3166_1": "IT", - "name": "Italy" - }, - { - "iso_3166_1": "ES", - "name": "Spain" - }, - { - "iso_3166_1": "DE", - "name": "Germany" - } - ], - "release_date": "1966-12-22", - "revenue": 38900000, - "runtime": 161, - "spoken_languages": [ - { - "english_name": "Italian", - "iso_639_1": "it", - "name": "Italiano" - } - ], - "status": "Released", - "tagline": "For three men the Civil War wasn't hell. It was practice.", - "title": "The Good, the Bad and the Ugly", - "video": false, - "vote_average": 8.465, - "vote_count": 8400 - }, - { - "adult": false, - "backdrop_path": "/d6UxFCGQxpszcf8mwgGjQ3ynqGl.jpg", - "belongs_to_collection": null, - "budget": 25000000, - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "http://www.warnerbros.com/goodfellas", - "id": 769, - "imdb_id": "tt0099685", - "origin_country": [ - "US" - ], - "original_language": "en", - "original_title": "GoodFellas", - "overview": "The true story of Henry Hill, a half-Irish, half-Sicilian Brooklyn kid who is adopted by neighbourhood gangsters at an early age and climbs the ranks of a Mafia family under the guidance of Jimmy Conway.", - "popularity": 114.877, - "poster_path": "/aKuFiU82s5ISJpGZp7YkIr3kCUd.jpg", - "production_companies": [ - { - "id": 8880, - "logo_path": "/fE7LBw7Jz8R29EABFGCvWNriZxN.png", - "name": "Winkler Films", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "release_date": "1990-09-12", - "revenue": 46800000, - "runtime": 145, - "spoken_languages": [ - { - "english_name": "Italian", - "iso_639_1": "it", - "name": "Italiano" - }, - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Released", - "tagline": "Three decades of life in the mafia.", - "title": "GoodFellas", - "video": false, - "vote_average": 8.463, - "vote_count": 12589 - }, - { - "adult": false, - "backdrop_path": "/sJNNMCc6B7KZIY3LH3JMYJJNH5j.jpg", - "belongs_to_collection": null, - "budget": 2000000, - "genres": [ - { - "id": 28, - "name": "Action" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "", - "id": 346, - "imdb_id": "tt0047478", - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_title": "七人の侍", - "overview": "A samurai answers a village's request for protection after he falls on hard times. The town needs protection from bandits, so the samurai gathers six others to help him teach the people how to defend themselves, and the villagers provide the soldiers with food.", - "popularity": 109.483, - "poster_path": "/8OKmBV5BUFzmozIC3pPWKHy17kx.jpg", - "production_companies": [ - { - "id": 882, - "logo_path": "/fRSWWjquvzcHjACbtF53utZFIll.png", - "name": "TOHO", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "release_date": "1954-04-26", - "revenue": 2626918, - "runtime": 207, - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Released", - "tagline": "The Mighty Warriors Who Became the Seven National Heroes of a Small Town", - "title": "Seven Samurai", - "video": false, - "vote_average": 8.461, - "vote_count": 3570 - }, - { - "adult": false, - "backdrop_path": "/bxSBOAD8AuMHYMdW3jso9npAkgt.jpg", - "belongs_to_collection": null, - "budget": 0, - "genres": [ - { - "id": 10751, - "name": "Family" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "", - "id": 667257, - "imdb_id": "tt10032342", - "origin_country": [ - "MX" - ], - "original_language": "es", - "original_title": "Cosas imposibles", - "overview": "After the death of her abusive husband, Matilde finds her new best friend in Miguel, her young, insecure, and disoriented neighbor.", - "popularity": 74.343, - "poster_path": "/t2Ew8NZ8Ci2kqmoecZUNQUFDJnQ.jpg", - "production_companies": [ - { - "id": 96929, - "logo_path": null, - "name": "Agencia SHA", - "origin_country": "" - }, - { - "id": 12487, - "logo_path": "/wUKVwhE1CWpgwNcL5x88zcWjJMI.png", - "name": "Alebrije Producciones", - "origin_country": "MX" - }, - { - "id": 7570, - "logo_path": "/gW8dfVtl1JsGIiLnvglea1OHHVr.png", - "name": "Videocine", - "origin_country": "MX" - } - ], - "production_countries": [ - { - "iso_3166_1": "MX", - "name": "Mexico" - } - ], - "release_date": "2021-06-17", - "revenue": 0, - "runtime": 88, - "spoken_languages": [ - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - } - ], - "status": "Released", - "tagline": "There are encounters that change your life", - "title": "Impossible Things", - "video": false, - "vote_average": 8.458, - "vote_count": 380 - }, - { - "adult": false, - "backdrop_path": "/gwj4R8Uy1GwejKqfofREKI9Jh7L.jpg", - "belongs_to_collection": null, - "budget": 3700000, - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10752, - "name": "War" - } - ], - "homepage": "https://gkids.com/films/grave-of-the-fireflies", - "id": 12477, - "imdb_id": "tt0095327", - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_title": "火垂るの墓", - "overview": "In the final months of World War II, 14-year-old Seita and his sister Setsuko are orphaned when their mother is killed during an air raid in Kobe, Japan. After a falling out with their aunt, they move into an abandoned bomb shelter. With no surviving relatives and their emergency rations depleted, Seita and Setsuko struggle to survive.", - "popularity": 0.065, - "poster_path": "/k9tv1rXZbOhH7eiCk378x61kNQ1.jpg", - "production_companies": [ - { - "id": 10342, - "logo_path": "/eS79pslnoKbWg7t3PMA9ayl0bGs.png", - "name": "Studio Ghibli", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "release_date": "1988-04-16", - "revenue": 516962, - "runtime": 89, - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Released", - "tagline": "", - "title": "Grave of the Fireflies", - "video": false, - "vote_average": 8.458, - "vote_count": 5343 - }, - { - "adult": false, - "backdrop_path": "/gavyCu1UaTaTNPsVaGXT6pe5u24.jpg", - "belongs_to_collection": null, - "budget": 20000000, - "genres": [ - { - "id": 35, - "name": "Comedy" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "", - "id": 637, - "imdb_id": "tt0118799", - "origin_country": [ - "IT" - ], - "original_language": "it", - "original_title": "La vita è bella", - "overview": "A touching story of an Italian book seller of Jewish ancestry who lives in his own little fairy tale. His creative and happy life would come to an abrupt halt when his entire family is deported to a concentration camp during World War II. While locked up he tries to convince his son that the whole thing is just a game.", - "popularity": 51.934, - "poster_path": "/74hLDKjD5aGYOotO6esUVaeISa2.jpg", - "production_companies": [ - { - "id": 22117, - "logo_path": null, - "name": "Mario e Vittorio Cecchi Gori - C.E.I.A.D.", - "origin_country": "" - }, - { - "id": 370, - "logo_path": null, - "name": "Melampo Cinematografica", - "origin_country": "IT" - } - ], - "production_countries": [ - { - "iso_3166_1": "IT", - "name": "Italy" - } - ], - "release_date": "1997-12-20", - "revenue": 230098753, - "runtime": 116, - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Czech", - "iso_639_1": "cs", - "name": "Český" - }, - { - "english_name": "Italian", - "iso_639_1": "it", - "name": "Italiano" - }, - { - "english_name": "German", - "iso_639_1": "de", - "name": "Deutsch" - } - ], - "status": "Released", - "tagline": "An unforgettable fable that proves love, family and imagination conquer all.", - "title": "Life Is Beautiful", - "video": false, - "vote_average": 8.451, - "vote_count": 12833 - } -] \ No newline at end of file diff --git a/ts/tmp/tv.json b/ts/tmp/tv.json deleted file mode 100644 index ddd9ad0..0000000 --- a/ts/tmp/tv.json +++ /dev/null @@ -1,4134 +0,0 @@ -[ - { - "adult": false, - "backdrop_path": "/96RT2A47UdzWlUfvIERFyBsLhL2.jpg", - "created_by": [], - "episode_run_time": [ - 25 - ], - "first_air_date": "2023-09-29", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "https://frieren-anime.jp/", - "id": 209867, - "in_production": false, - "languages": [ - "ja" - ], - "last_air_date": "2024-03-22", - "last_episode_to_air": { - "id": 4810165, - "name": "It Would Be Embarrassing When We Met Again", - "overview": "As the first-class mage exam concludes and the test-takers go their separate ways, farewell leads to departure - but the next stage of Frieren's journey has only just begun.", - "vote_average": 9.333, - "vote_count": 12, - "air_date": "2024-03-22", - "episode_number": 28, - "episode_type": "finale", - "production_code": "", - "runtime": 24, - "season_number": 1, - "show_id": 209867, - "still_path": "/5e0p1EY2X35OXhik0p77nMuN8Iy.jpg" - }, - "name": "Frieren: Beyond Journey's End", - "next_episode_to_air": null, - "networks": [ - { - "id": 57, - "logo_path": "/uxaXSoT8K0S2NE5PWsBpHUl3GGU.png", - "name": "Nippon TV", - "origin_country": "JP" - }, - { - "id": 569, - "logo_path": "/cIMyE9cw1W4kMFGxmC17HKTnVz9.png", - "name": "YTV", - "origin_country": "JP" - }, - { - "id": 1896, - "logo_path": "/suqJy99xiGr8PV7eQovUFRgquYT.png", - "name": "FBS", - "origin_country": "JP" - }, - { - "id": 2727, - "logo_path": "/85U2onICiQV9fMHORxw8EWSQ6MZ.png", - "name": "Chukyo TV", - "origin_country": "JP" - }, - { - "id": 2728, - "logo_path": "/kwC7bfbGknKuL7uxKahk6paamlp.png", - "name": "RNB", - "origin_country": "JP" - }, - { - "id": 3201, - "logo_path": "/4OpeDJ8jzPeaSiOlzGCnHjm6tpt.png", - "name": "HTV", - "origin_country": "JP" - }, - { - "id": 3644, - "logo_path": "/8Cue5NzJ6cucpA5k73GVrCqn2JI.png", - "name": "FCT", - "origin_country": "JP" - }, - { - "id": 3698, - "logo_path": "/rrw1HbmPpR9GQ3K19taPCYYf5jY.png", - "name": "STV", - "origin_country": "JP" - }, - { - "id": 3741, - "logo_path": "/hiI8H4WLDlCtRZQboq4BTdM2KAg.png", - "name": "KNB", - "origin_country": "JP" - }, - { - "id": 4790, - "logo_path": "/5aEqvKUgffp6zehXyCUhJyzeZPg.png", - "name": "YBS", - "origin_country": "JP" - }, - { - "id": 4791, - "logo_path": "/e9WRfzkc8HNsZ1qEF26ENHlBMvn.png", - "name": "KTK", - "origin_country": "JP" - }, - { - "id": 4797, - "logo_path": "/ggNJJiuB0mT4cQckN9h6jxT7exe.png", - "name": "NKT", - "origin_country": "JP" - }, - { - "id": 4815, - "logo_path": "/igW7DjfUZ8Ew7BLzCxKHKpeFFL3.png", - "name": "RAB", - "origin_country": "JP" - }, - { - "id": 4816, - "logo_path": "/9qQIAEYEw1ZyPPK3tqE18Z00AwW.png", - "name": "TVI", - "origin_country": "JP" - }, - { - "id": 4817, - "logo_path": "/oxuY8YFFO6Iv1IicYRGFcLizERc.png", - "name": "MMT", - "origin_country": "JP" - }, - { - "id": 4818, - "logo_path": "/rddkLH5IZoh5IW5b6FHgrOBjBgE.png", - "name": "ABS", - "origin_country": "JP" - }, - { - "id": 4822, - "logo_path": "/xX0I9Sc0AxSoKoVtwwmz0DWOWcr.png", - "name": "JRT", - "origin_country": "JP" - }, - { - "id": 6155, - "logo_path": "/cvePJ33fR2SeirKZWD8rCV7rAaF.png", - "name": "YBC", - "origin_country": "JP" - }, - { - "id": 6156, - "logo_path": "/gxpzF98cV1DHpXzJmXf2Ew6sQvV.png", - "name": "UMK TV Miyazaki", - "origin_country": "JP" - }, - { - "id": 6286, - "logo_path": "/mcA2WrzDxg1MuZ2TnewjVZaTvM2.png", - "name": "TSB", - "origin_country": "JP" - }, - { - "id": 6668, - "logo_path": "/atlFO76SPaLGIt9Wmxzg23M0IoA.png", - "name": "TeNY", - "origin_country": "JP" - }, - { - "id": 6669, - "logo_path": "/w9VRiRNT3OrP09OHXl6i1nGFWiL.png", - "name": "RNC", - "origin_country": "JP" - }, - { - "id": 6670, - "logo_path": "/7OAJi6aS9zQWwP64jqxRllBvYKR.png", - "name": "NIB", - "origin_country": "JP" - }, - { - "id": 6671, - "logo_path": "/jd0KEJ6Md6JBRWjxTHRU9BYpbuv.png", - "name": "KKT", - "origin_country": "JP" - }, - { - "id": 7076, - "logo_path": "/tFePbc4dqJzcUaHeKAQkhRgT5zJ.png", - "name": "Daiichi-TV", - "origin_country": "JP" - }, - { - "id": 7077, - "logo_path": "/r1vdmMUpIGnGvLE3UMqkuEtWlG4.png", - "name": "FBC", - "origin_country": "JP" - }, - { - "id": 7078, - "logo_path": "/7QYtCUc3PxYvOQ0NDOw3vQHAIJh.png", - "name": "RKC", - "origin_country": "JP" - }, - { - "id": 7079, - "logo_path": "/wqeYNfsn0LSwbmQGPkcqMg5yhpW.png", - "name": "KYT", - "origin_country": "JP" - }, - { - "id": 7092, - "logo_path": "/5IzL2Fq2yErfy4LH96KX5PKOAbv.png", - "name": "KRY", - "origin_country": "JP" - } - ], - "number_of_episodes": 28, - "number_of_seasons": 1, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "葬送のフリーレン", - "overview": "After the party of heroes defeated the Demon King, they restored peace to the land and returned to lives of solitude. Generations pass, and the elven mage Frieren comes face to face with humanity’s mortality. She takes on a new apprentice and promises to fulfill old friends’ dying wishes. Can an elven mind make peace with the nature of life and death? Frieren embarks on her quest to find out.", - "popularity": 223.346, - "poster_path": "/dqZENchTd7lp5zht7BdlqM7RBhD.jpg", - "production_companies": [ - { - "id": 3464, - "logo_path": "/9k0nr75nwnNeT2MHerf1OXJN0hj.png", - "name": "Madhouse", - "origin_country": "JP" - }, - { - "id": 882, - "logo_path": "/fRSWWjquvzcHjACbtF53utZFIll.png", - "name": "TOHO", - "origin_country": "JP" - }, - { - "id": 9149, - "logo_path": "/isLUpud9N56ifftJZ4XvzwBBpoG.png", - "name": "Shogakukan", - "origin_country": "JP" - }, - { - "id": 6755, - "logo_path": "/c0ENH8QeZLvCACpzCpwvYMy2SDr.png", - "name": "Nippon Television Network Corporation", - "origin_country": "JP" - }, - { - "id": 12655, - "logo_path": "/dfGqf2NoMVPrDywDL90D5HAhBlW.png", - "name": "Shogakukan-Shueisha Productions", - "origin_country": "JP" - }, - { - "id": 1778, - "logo_path": "/b5rT6VbYza3LyfltCmz1OcqzWJM.png", - "name": "dentsu", - "origin_country": "JP" - }, - { - "id": 2883, - "logo_path": "/rDYExnBV61jGQnkhVVrPN4Yl7O1.png", - "name": "Aniplex", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2023-10-11", - "episode_count": 14, - "id": 360492, - "name": "Specials", - "overview": "", - "poster_path": "/fazbwo9OYXhhHCrRfwPU3Eup4iL.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2023-09-29", - "episode_count": 28, - "id": 307972, - "name": "Season 1", - "overview": "", - "poster_path": "/yHsxHEugPPlOPqFZrPGvurltPjm.jpg", - "season_number": 1, - "vote_average": 8.8 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Ended", - "tagline": "", - "type": "Scripted", - "vote_average": 8.925, - "vote_count": 239 - }, - { - "adult": false, - "backdrop_path": "/9kyyQXy79YRdY5mhrYKyktbFMev.jpg", - "created_by": [ - { - "id": 1754390, - "credit_id": "5db721ba27d9cc001813ccf5", - "name": "Vivienne Medrano", - "original_name": "Vivienne Medrano", - "gender": 1, - "profile_path": null - } - ], - "episode_run_time": [ - 25 - ], - "first_air_date": "2024-01-18", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "https://www.amazon.com/dp/B0CLMPQTJ2", - "id": 94954, - "in_production": true, - "languages": [ - "en" - ], - "last_air_date": "2024-02-01", - "last_episode_to_air": { - "id": 4768894, - "name": "The Show Must Go On", - "overview": "All bets are off as the confrontation between the legions of Heaven and Hell begins.", - "vote_average": 7.375, - "vote_count": 8, - "air_date": "2024-02-01", - "episode_number": 8, - "episode_type": "finale", - "production_code": "1BBHH08", - "runtime": 25, - "season_number": 1, - "show_id": 94954, - "still_path": "/mVa6wxS7I7097HyMi1FGe38XrOm.jpg" - }, - "name": "Hazbin Hotel", - "next_episode_to_air": null, - "networks": [ - { - "id": 1024, - "logo_path": "/ifhbNuuVnlwYy5oXA5VIb2YR8AZ.png", - "name": "Prime Video", - "origin_country": "" - } - ], - "number_of_episodes": 8, - "number_of_seasons": 2, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Hazbin Hotel", - "overview": "In attempt to find a non-violent alternative for reducing Hell's overpopulation, the daughter of Lucifer opens a rehabilitation hotel that offers a group of misfit demons a chance at redemption.", - "popularity": 204.338, - "poster_path": "/rXojaQcxVUubPLSrFV8PD4xdjrs.jpg", - "production_companies": [ - { - "id": 41077, - "logo_path": "/1ZXsGaFPgrgS6ZZGS37AqD5uU12.png", - "name": "A24", - "origin_country": "US" - }, - { - "id": 139412, - "logo_path": "/4HQQR6ySkFByBmCHtZfYXktHkAY.png", - "name": "SpindleHorse Toons", - "origin_country": "US" - }, - { - "id": 30452, - "logo_path": "/zmU1ElCS02iL5N7E5MuY4fV7bCX.png", - "name": "Bento Box Entertainment", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2019-10-28", - "episode_count": 2, - "id": 199540, - "name": "Specials", - "overview": "", - "poster_path": "/aYApV2vAn2bvY8HbkXHGbmG6FYS.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2024-01-18", - "episode_count": 8, - "id": 134875, - "name": "Season 1", - "overview": "", - "poster_path": "/u9zmPp8ouqyX2zwXkqM9JzJ4zCO.jpg", - "season_number": 1, - "vote_average": 7.8 - }, - { - "air_date": null, - "episode_count": 0, - "id": 403771, - "name": "Season 2", - "overview": "", - "poster_path": null, - "season_number": 2, - "vote_average": 0 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Returning Series", - "tagline": "", - "type": "Scripted", - "vote_average": 8.916, - "vote_count": 1020 - }, - { - "adult": false, - "backdrop_path": "/9faGSFi5jam6pDWGNd0p8JcJgXQ.jpg", - "created_by": [ - { - "id": 66633, - "credit_id": "52542286760ee31328001a7b", - "name": "Vince Gilligan", - "original_name": "Vince Gilligan", - "gender": 2, - "profile_path": "/z3E0DhBg1V1PZVEtS9vfFPzOWYB.jpg" - } - ], - "episode_run_time": [], - "first_air_date": "2008-01-20", - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 80, - "name": "Crime" - } - ], - "homepage": "https://www.sonypictures.com/tv/breakingbad", - "id": 1396, - "in_production": false, - "languages": [ - "en", - "de", - "es" - ], - "last_air_date": "2013-09-29", - "last_episode_to_air": { - "id": 62161, - "name": "Felina", - "overview": "All bad things must come to an end.", - "vote_average": 9.21, - "vote_count": 212, - "air_date": "2013-09-29", - "episode_number": 16, - "episode_type": "finale", - "production_code": "", - "runtime": 56, - "season_number": 5, - "show_id": 1396, - "still_path": "/pA0YwyhvdDXP3BEGL2grrIhq8aM.jpg" - }, - "name": "Breaking Bad", - "next_episode_to_air": null, - "networks": [ - { - "id": 174, - "logo_path": "/alqLicR1ZMHMaZGP3xRQxn9sq7p.png", - "name": "AMC", - "origin_country": "US" - } - ], - "number_of_episodes": 62, - "number_of_seasons": 5, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Breaking Bad", - "overview": "Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of only two years left to live. He becomes filled with a sense of fearlessness and an unrelenting desire to secure his family's financial future at any cost as he enters the dangerous world of drugs and crime.", - "popularity": 772.832, - "poster_path": "/ztkUQFLlC19CCMYHW9o1zWhJRNq.jpg", - "production_companies": [ - { - "id": 11073, - "logo_path": "/aCbASRcI1MI7DXjPbSW9Fcv9uGR.png", - "name": "Sony Pictures Television Studios", - "origin_country": "US" - }, - { - "id": 33742, - "logo_path": null, - "name": "High Bridge Productions", - "origin_country": "US" - }, - { - "id": 2605, - "logo_path": null, - "name": "Gran Via Productions", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2009-02-17", - "episode_count": 9, - "id": 3577, - "name": "Specials", - "overview": "", - "poster_path": "/40dT79mDEZwXkQiZNBgSaydQFDP.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2008-01-20", - "episode_count": 7, - "id": 3572, - "name": "Season 1", - "overview": "High school chemistry teacher Walter White's life is suddenly transformed by a dire medical diagnosis. Street-savvy former student Jesse Pinkman \"teaches\" Walter a new trade.", - "poster_path": "/1BP4xYv9ZG4ZVHkL7ocOziBbSYH.jpg", - "season_number": 1, - "vote_average": 8.3 - }, - { - "air_date": "2009-03-08", - "episode_count": 13, - "id": 3573, - "name": "Season 2", - "overview": "Walt must deal with the chain reaction of his choice, as he and Jesse face new and severe consequences. When danger and suspicion around Walt escalate, he is pushed to new levels of desperation. Just how much higher will the stakes rise? How far is Walt willing to go to ensure his family's security? Will his grand plan spiral out of control?", - "poster_path": "/e3oGYpoTUhOFK0BJfloru5ZmGV.jpg", - "season_number": 2, - "vote_average": 8.4 - }, - { - "air_date": "2010-03-21", - "episode_count": 13, - "id": 3575, - "name": "Season 3", - "overview": "Walt continues to battle dueling identities: a desperate husband and father trying to provide for his family, and a newly appointed key player in the Albuquerque drug trade. As the danger around him escalates, Walt is now entrenched in the complex worlds of an angst-ridden family on the verge of dissolution, and the ruthless and unrelenting drug cartel.", - "poster_path": "/ffP8Q8ew048YofHRnFVM18B2fPG.jpg", - "season_number": 3, - "vote_average": 8.4 - }, - { - "air_date": "2011-07-17", - "episode_count": 13, - "id": 3576, - "name": "Season 4", - "overview": "Walt and Jesse must cope with the fallout of their previous actions, both personally and professionally. Tension mounts as Walt faces a true standoff with his employer, Gus, with neither side willing or able to back down. Walt must also adjust to a new relationship with Skyler, whom while still reconciling her relationship with Walt, is committed to properly laundering Walt’s money and ensuring her sister Marie and an ailing Hank are financially stable.", - "poster_path": "/5p7WduYlIIFjVYUIsqRZLFYWjMc.jpg", - "season_number": 4, - "vote_average": 8.5 - }, - { - "air_date": "2012-07-15", - "episode_count": 16, - "id": 3578, - "name": "Season 5", - "overview": "Walt is faced with the prospect of moving on in a world without his enemy. As the pressure of a criminal life starts to build, Skyler struggles to keep Walt’s terrible secrets. Facing resistance from sometime adversary and former Fring lieutenant Mike, Walt tries to keep his world from falling apart even as his DEA Agent brother in law, Hank, finds numerous leads that could blaze a path straight to Walt. ", - "poster_path": "/r3z70vunihrAkjILQKWHX0G2xzO.jpg", - "season_number": 5, - "vote_average": 8.9 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "German", - "iso_639_1": "de", - "name": "Deutsch" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - } - ], - "status": "Ended", - "tagline": "Change the equation.", - "type": "Scripted", - "vote_average": 8.912, - "vote_count": 13910 - }, - { - "adult": false, - "backdrop_path": "/rkB4LyZHo1NHXFEDHl9vSD9r1lI.jpg", - "created_by": [ - { - "id": 2000007, - "credit_id": "62d5e468c92c5d004f0d1201", - "name": "Christian Linke", - "original_name": "Christian Linke", - "gender": 2, - "profile_path": "/yTYR4W1ORuSBoVPjnkGafNPKQDc.jpg" - }, - { - "id": 3299121, - "credit_id": "62d5e46e72c13e062e7196aa", - "name": "Alex Yee", - "original_name": "Alex Yee", - "gender": 2, - "profile_path": "/nTAS8k6wyonvoiwSxYnDibvPA8Q.jpg" - } - ], - "episode_run_time": [], - "first_air_date": "2021-11-06", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 10759, - "name": "Action & Adventure" - } - ], - "homepage": "https://arcane.com", - "id": 94605, - "in_production": true, - "languages": [ - "en" - ], - "last_air_date": "2021-11-20", - "last_episode_to_air": { - "id": 3246870, - "name": "The Monster You Created", - "overview": "Perilously close to war, the leaders of Piltover and Zaun reach an ultimatum. But a fateful standoff changes both cities forever.", - "vote_average": 8.739, - "vote_count": 46, - "air_date": "2021-11-20", - "episode_number": 9, - "episode_type": "finale", - "production_code": "", - "runtime": 42, - "season_number": 1, - "show_id": 94605, - "still_path": "/whYSErvez8kncpTmTRBsRd1Pg5i.jpg" - }, - "name": "Arcane", - "next_episode_to_air": null, - "networks": [ - { - "id": 213, - "logo_path": "/wwemzKWzjKYJFfCeiB57q3r4Bcm.png", - "name": "Netflix", - "origin_country": "" - } - ], - "number_of_episodes": 9, - "number_of_seasons": 2, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Arcane", - "overview": "Amid the stark discord of twin cities Piltover and Zaun, two sisters fight on rival sides of a war between magic technologies and clashing convictions.", - "popularity": 294.288, - "poster_path": "/fqldf2t8ztc9aiwn3k6mlX3tvRT.jpg", - "production_companies": [ - { - "id": 99496, - "logo_path": "/6WTCdsmIH6qR2zFVHlqjpIZhD5A.png", - "name": "Fortiche Production", - "origin_country": "FR" - }, - { - "id": 124172, - "logo_path": "/sBlhznEktXKBqC87Bsfwpo1YbYR.png", - "name": "Riot Games", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "FR", - "name": "France" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2021-11-06", - "episode_count": 9, - "id": 134187, - "name": "Season 1", - "overview": "Two sisters. Two cities. One discovery that will change the world forever. In the cities of Piltover and Zaun, unrest stirs as inventors and thieves, politicians and crime lords chafe against the constraints of a society torn asunder.", - "poster_path": "/6FMWx79iAtZx8WHtOrRj0VlM8Tp.jpg", - "season_number": 1, - "vote_average": 8.5 - }, - { - "air_date": null, - "episode_count": 0, - "id": 351997, - "name": "Season 2", - "overview": "", - "poster_path": "/oTGEwkp1mPgWNMgVSM53TWfzgSc.jpg", - "season_number": 2, - "vote_average": 0 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Returning Series", - "tagline": "The hunt is on.", - "type": "Scripted", - "vote_average": 8.744, - "vote_count": 3889 - }, - { - "adult": false, - "backdrop_path": "/kU98MbVVgi72wzceyrEbClZmMFe.jpg", - "created_by": [ - { - "id": 1190517, - "credit_id": "5253483c19c29579400de990", - "name": "Michael Dante DiMartino", - "original_name": "Michael Dante DiMartino", - "gender": 2, - "profile_path": "/8ey06cRWYe5TlKl5tyYQf57kknw.jpg" - }, - { - "id": 1190518, - "credit_id": "5253483c19c29579400de996", - "name": "Bryan Konietzko", - "original_name": "Bryan Konietzko", - "gender": 2, - "profile_path": "/5lPnGvtATjmPakR96dqPW3v4u8q.jpg" - } - ], - "episode_run_time": [ - 25 - ], - "first_air_date": "2005-02-21", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "https://www.nick.com/shows/avatar-the-last-airbender", - "id": 246, - "in_production": false, - "languages": [ - "en" - ], - "last_air_date": "2008-07-19", - "last_episode_to_air": { - "id": 13575, - "name": "Sozin's Comet: Avatar Aang (4)", - "overview": "Aang defeats the Fire Lord by bending the elements within the Fire Lord and removing his firebending abilities. After Zuko is taken down protecting Katara from Azula, Katara joins the fight and manages to restrain Azula. Afterwards, Zuko is crowned Fire Lord and promises a better future for the world, while Aang takes his place as the next Avatar. Katara finally shows her love for Aang as they kiss under the setting sun.", - "vote_average": 9.2, - "vote_count": 45, - "air_date": "2008-07-19", - "episode_number": 21, - "episode_type": "finale", - "production_code": "321", - "runtime": 24, - "season_number": 3, - "show_id": 246, - "still_path": "/4a93Ud89t51LcvyiDTtWFRscUhE.jpg" - }, - "name": "Avatar: The Last Airbender", - "next_episode_to_air": null, - "networks": [ - { - "id": 13, - "logo_path": "/aYkLXz4dxHgOrFNH7Jv7Cpy56Ms.png", - "name": "Nickelodeon", - "origin_country": "US" - } - ], - "number_of_episodes": 61, - "number_of_seasons": 3, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Avatar: The Last Airbender", - "overview": "In a war-torn world of elemental magic, a young boy reawakens to undertake a dangerous mystic quest to fulfill his destiny as the Avatar, and bring peace to the world.", - "popularity": 129.404, - "poster_path": "/v2vn1coUMPKw0GI1KGC5J4IXtqp.jpg", - "production_companies": [ - { - "id": 4859, - "logo_path": "/wOF6aAYFE5BQryYyaMdQPqUWYwt.png", - "name": "Nickelodeon Animation Studio", - "origin_country": "US" - }, - { - "id": 8032, - "logo_path": null, - "name": "JM Animation", - "origin_country": "KR" - }, - { - "id": 43756, - "logo_path": "/bwwJk6P9hycQGwUbWFj07cfyCG4.png", - "name": "DR Movie", - "origin_country": "KR" - }, - { - "id": 8410, - "logo_path": null, - "name": "Moi Animation", - "origin_country": "KR" - }, - { - "id": 5371, - "logo_path": "/2GFJ3jJ7dhjqcOGj41aTwd3OhQT.png", - "name": "Nickelodeon Productions", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "KR", - "name": "South Korea" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - }, - { - "iso_3166_1": "MY", - "name": "Malaysia" - }, - { - "iso_3166_1": "SG", - "name": "Singapore" - } - ], - "seasons": [ - { - "air_date": "2002-04-30", - "episode_count": 24, - "id": 788, - "name": "Specials", - "overview": "Unaired Pilot, Recaps, Specials and DVD extras.", - "poster_path": "/qDll9gvIj9vVcgQKtbkad0390kP.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2005-02-21", - "episode_count": 20, - "id": 785, - "name": "Book One: Water", - "overview": "Katara and Sokka (a brother and sister from the Southern Water Tribe) discover the Avatar (a 12-year-old Airbender boy named Aang) frozen in an iceberg. Together the three begin their journey to the North Pole to find a master waterbender so Aang can begin his Avatar training!", - "poster_path": "/tUG6h0rMtQyOgvqI8r9AqxlKoUP.jpg", - "season_number": 1, - "vote_average": 7.8 - }, - { - "air_date": "2006-03-17", - "episode_count": 20, - "id": 787, - "name": "Book Two: Earth", - "overview": "Aang, along with Katara, Sokka, and their animal friends Appa and Momo, continues on his quest to fulfill his destiny as the Avatar. According to the Avatar cycle, the group must now enter the Earth Kingdom to search for a master earthbender to teach Aang.", - "poster_path": "/quX70K1L7vTLQ9vRJcK0kKcNNFA.jpg", - "season_number": 2, - "vote_average": 8 - }, - { - "air_date": "2007-09-21", - "episode_count": 21, - "id": 786, - "name": "Book Three: Fire", - "overview": "Aang wakes up from his battle with Azula to discover that Ba Sing Se has fallen and the world thinks he's dead. So he and his friends set off undercover across the Fire Nation to find Fire Lord Ozai before the Day of Black Sun. Prince Zuko returns home as the triumphant son, but soon finds the honor he so greatly craved from his father is worthless. New alliances are formed and Team Avatar forges a new plan to stop the Fire Lord. But will they find him in time?", - "poster_path": "/roPE4jaHawj1Dm6uIXJHuLDpkNy.jpg", - "season_number": 3, - "vote_average": 8.1 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Ended", - "tagline": "Water. Earth. Fire. Air.", - "type": "Scripted", - "vote_average": 8.7, - "vote_count": 4007 - }, - { - "adult": false, - "backdrop_path": "/2rmK7mnchw9Xr3XdiTFSxTTLXqv.jpg", - "created_by": [], - "episode_run_time": [ - 24 - ], - "first_air_date": "1999-10-20", - "genres": [ - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 16, - "name": "Animation" - } - ], - "homepage": "http://www.toei-anim.co.jp/tv/onep", - "id": 37854, - "in_production": true, - "languages": [ - "ja" - ], - "last_air_date": "2024-07-14", - "last_episode_to_air": { - "id": 5446127, - "name": "Run, Koby! A Desperate Escape Strategy!", - "overview": "", - "vote_average": 0, - "vote_count": 0, - "air_date": "2024-07-28", - "episode_number": 1113, - "episode_type": "standard", - "production_code": "", - "runtime": 24, - "season_number": 22, - "show_id": 37854, - "still_path": "/78arp3lM6IVbuWGudMMKfkWdi4w.jpg" - }, - "name": "One Piece", - "next_episode_to_air": { - "id": 5465611, - "name": "For the Beloved Pupil - The Fist of Vice Admiral Garp!", - "overview": "", - "vote_average": 0, - "vote_count": 0, - "air_date": "2024-08-04", - "episode_number": 1114, - "episode_type": "standard", - "production_code": "", - "runtime": 24, - "season_number": 22, - "show_id": 37854, - "still_path": null - }, - "networks": [ - { - "id": 1, - "logo_path": "/4x4GsmRmSLLL0RVNKsoqAVH43tz.png", - "name": "Fuji TV", - "origin_country": "JP" - } - ], - "number_of_episodes": 1115, - "number_of_seasons": 22, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "ワンピース", - "overview": "Years ago, the fearsome Pirate King, Gol D. Roger was executed leaving a huge pile of treasure and the famous \"One Piece\" behind. Whoever claims the \"One Piece\" will be named the new King of the Pirates.\n\nMonkey D. Luffy, a boy who consumed a \"Devil Fruit,\" decides to follow in the footsteps of his idol, the pirate Shanks, and find the One Piece. It helps, of course, that his body has the properties of rubber and that he's surrounded by a bevy of skilled fighters and thieves to help him along the way.\n\nLuffy will do anything to get the One Piece and become King of the Pirates!", - "popularity": 173.458, - "poster_path": "/e3NBGiAifW9Xt8xD5tpARskjccO.jpg", - "production_companies": [ - { - "id": 5542, - "logo_path": "/ayE4LIqoAWotavo7xdvYngwqGML.png", - "name": "Toei Animation", - "origin_country": "JP" - }, - { - "id": 3341, - "logo_path": "/dTG5dXE1kU2mpmL9BNnraffckLU.png", - "name": "Fuji Television Network", - "origin_country": "JP" - }, - { - "id": 130799, - "logo_path": null, - "name": "Avex Trax", - "origin_country": "JP" - }, - { - "id": 2918, - "logo_path": "/gyEWUBWwqrm3H5T2hkERD9LxpOq.png", - "name": "Shueisha", - "origin_country": "JP" - }, - { - "id": 4720, - "logo_path": "/7wQgZTA4FCkFMDedBYVZiVE87c7.png", - "name": "Asatsu-DK", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "1999-12-22", - "episode_count": 30, - "id": 49191, - "name": "Specials", - "overview": "", - "poster_path": "/d3TJkAgh8JZXrlD9z8R0pUgwIsx.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "1999-10-20", - "episode_count": 61, - "id": 49188, - "name": "East Blue", - "overview": "Monkey D. Luffy meets the Red Hair Pirates as a young boy living in East Blue, swearing becoming the next Pirate King. 10 years later, Luffy sets sail and experiences first adventures, recruiting the first members of the Straw Hat Pirates.", - "poster_path": "/9hW62RDq5Dno8vLABXscddjEq9M.jpg", - "season_number": 1, - "vote_average": 8.2 - }, - { - "air_date": null, - "episode_count": 16, - "id": 49189, - "name": "Whisky Peak & Little Garden", - "overview": "With a Log Pose now in hand, the Straw Hat Pirates are directed toward Whisky Peak, a town that welcomes pirates with open arms and treats them like celebrities. However, the townsfolk have a dark secret, and an even deeper mystery awaits.\n\nNow with Vivi in tow, the Straw Hat Pirates travel to the prehistoric island of Little Garden. There, they encounter two Giants, Dorry and Brogy, who have been dueling one another on the island for the past century. After befriending the giants, the crew are ambushed by new and familiar officers of Baroque Works.", - "poster_path": "/egsfvwuojnsNZRTrqLkWyw09p6f.jpg", - "season_number": 2, - "vote_average": 8.1 - }, - { - "air_date": null, - "episode_count": 14, - "id": 49190, - "name": "Drum Island", - "overview": "After Nami falls ill with an unknown disease, the Straw Hat Pirates travel to Drum Island in search of a doctor. The crew meets a bizarre talking reindeer named Tony Tony Chopper, who helps them fend off the country's former despot king Wapol after he returns to reclaim his throne.", - "poster_path": "/fyOt2eCAVAB5tUpf4oOrLqX1cYD.jpg", - "season_number": 3, - "vote_average": 8.5 - }, - { - "air_date": null, - "episode_count": 39, - "id": 49183, - "name": "Alabasta", - "overview": "The Straw Hats, with Kureha's assistant Tony Tony Chopper, finally arrive at Arabasta, which is on the verge of civil war. Vivi must reach the rebels and tell them the real cause behind the conflict, but Crocodile, leader of Baroque Works and one of the Seven Warlords of the Sea, will not just stand by and watch. In the end, Baroque Works, marine forces, pirates, the royal guards, and the rebel army clash in a battle that will determine the fate of the country itself.", - "poster_path": "/psjQVMfKxjkiyH9fK9Byo9ynVy9.jpg", - "season_number": 4, - "vote_average": 8.6 - }, - { - "air_date": null, - "episode_count": 13, - "id": 49184, - "name": "Post-Alabasta, Goat Island & Ruluka Island", - "overview": "While on the run from some Marines, the crew stumble upon an island inhabited by a man named Zenny who lives with a herd of goats. The crew set out to him in his seemingly final days. After evading some Marines, the crew stop off in a small town with a huge tower, which is also being oppressed by the Mayor whose overtaxing the citizens. But a bigger concern is a nearby mist that prevents anyone who enters it from leaving.", - "poster_path": "/dJHWwdcNzsbBUAnXdNsrIAgkmiK.jpg", - "season_number": 5, - "vote_average": 8.8 - }, - { - "air_date": null, - "episode_count": 52, - "id": 49185, - "name": "Skypiea", - "overview": "The Straw Hats arrive on the Sky Island Skypiea and learn of its connections to Jaya and Mont Blanc Noland's tale of a lost city of gold. As the crew embarks in search of treasure, they become entangled in a three-way war between the native Skypieans, the vengeful Shandians, and the land's cruel \"god\", Enel.", - "poster_path": "/hYasiagbhomaEj0Vv1LMqewOuBE.jpg", - "season_number": 6, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 33, - "id": 49179, - "name": "Long Ring Long Land", - "overview": "The Straw Hats accidentally float down into the Marine base, G-8. Forced to abandon ship, the crew must make their way through the base to reclaim the Going Merry and avoid capture.\n\nThe crew manage to safely reach their next island, Long Ring Long Land. They meet a nomad who's been stuck on the island for a while and offer to help him. But before they can, they're challenged by a pirate who calls himself Foxy the Silver Fox in a game of \"Davy Back Fight\", where the losers can lose their crew members.\n\nOne night as the crew rest, a boy with a seahorse-shaped flute plays it near the ship. The next day the crew awaken with their memories of each other wiped out, except for Robin. It's up to her, who was the only one not affected, to get the crew's memories back and find out the cause of it.\n\nThe Straw Hat pirates later re-encounter Foxy, Porche, and Hamburg. This encounter leads to a fight, and also leads to the encounter with Aokiji.", - "poster_path": "/A2msjyMOBEdbSHjiPHWLZhKI5HS.jpg", - "season_number": 7, - "vote_average": 8.8 - }, - { - "air_date": null, - "episode_count": 35, - "id": 49192, - "name": "Water Seven", - "overview": "The Straw Hats arrive at the oceanic metropolis of Water 7 to find a shipwright who can repair the Going Merry, as well as potentially join their crew. They soon become targeted by the Franky Family, the city's underground gang, and become involved in a plot within the Galley-La Company. Between the disappearance of Robin and a schism that develops between Luffy and Usopp, the crew begins to fall apart.", - "poster_path": "/ww1JO056uv4KhDSycDTLkNRveIg.jpg", - "season_number": 8, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 73, - "id": 49180, - "name": "Enies Lobby", - "overview": "The Straw Hats, Sogeking, the Franky Family, and the shipwrights of the Galley-La Company arrive at Enies Lobby aboard the Rocketman to rescue Nico Robin and Franky. Standing in their way, however, are the forces of the World Government, including its deadly assassination unit, CP9. A massive battle ensues between the two sides when Luffy declares war against the World Government.", - "poster_path": "/7y6yoAIepNVrNTLMxgHEEgjEEge.jpg", - "season_number": 9, - "vote_average": 8.9 - }, - { - "air_date": null, - "episode_count": 45, - "id": 49181, - "name": "Thriller Bark", - "overview": "During their journey through the Florian Triangle, the Straw Hats arrive on a seemingly haunted island called Thriller Bark, where they encounter the Warlord Gecko Moria. Using his Devil Fruit abilities, Moria steals the Straw Hats' shadows. With the help of a mysterious talking skeleton named Brook, the crew must regain their shadows before sunrise in order to survive.", - "poster_path": "/gCWPlCfElGdGtl6xryoyXcadNd9.jpg", - "season_number": 10, - "vote_average": 8.6 - }, - { - "air_date": null, - "episode_count": 26, - "id": 49186, - "name": "Sabaody Archipelago", - "overview": "The Straw Hat Pirates arrive at the final island of the Grand Line's first half, Sabaody Archipelago. While searching for a means to pass under the Red Line into the New World, they come into conflict with a deadly slave trading ring that sells to the World Nobles. Luffy and Zoro are labelled as two of the Eleven Supernovas, rookies of significant bounties who have simultaneously arrived at the archipelago. A chain reaction of events engulfs the archipelago in chaos, and the Straw Hats are faced with their greatest challenge yet.", - "poster_path": "/kMvtZUg4jCZ4JzEqvOCjkiklQfF.jpg", - "season_number": 11, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 14, - "id": 49182, - "name": "Amazon Lily", - "overview": "After his defeat at the hands of Kuma at the Sabaody Archipelago, Luffy is sent flying and crash lands on Amazon Lily, an island exclusive to women that executes males on sight. As he tries to find a way off the island and back to his crew, Luffy makes unexpected friends and foes, while also learning of his brother's imminent peril.", - "poster_path": "/bVjlWX17j9t6XB3AZ3KOv7ya7g7.jpg", - "season_number": 12, - "vote_average": 8.7 - }, - { - "air_date": null, - "episode_count": 101, - "id": 49187, - "name": "Impel Down & Marineford", - "overview": "Luffy puts finding his crew on hold in favor of rescuing his brother Ace from the underwater prison Impel Down. With Boa Hancock's help, he manages to infiltrate the facility. However, fulfilling his objective and escaping the hellish prison might be easier said than done.\n\nHaving failed to reach Ace before he was transferred, Luffy and his companions escape from Impel Down and travel to Marineford, the base of Marine Headquarters. With the odds stacked high against him, the imminent threat of Whitebeard, and the ulterior motives of pirates that wish to overthrow the Emperor, Luffy struggles to hold his own in this titanic clash of powers.", - "poster_path": "/zcVNRh5sqdgSgoXm0Z2GlTxF6DN.jpg", - "season_number": 13, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 58, - "id": 49193, - "name": "Fishman Island", - "overview": "The Straw Hat Pirates finally arrive at Fishman Island. There, the crew learn the history of Fisher Tiger and the ongoing discrimination between humans and fishman, while the New Fishman Pirates plot to overtake Ryugu Kingdom and make fishman be recognized as the supreme race.", - "poster_path": "/wpVC1e0RVK2qRtZMFDYu1c6mHcy.jpg", - "season_number": 14, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 62, - "id": 49194, - "name": "Punk Hazard", - "overview": "Upon finally entering the New World, the Straw Hat Pirates immediately receive a distress call from residents of Punk Hazard, who state that a samurai is attacking them. Without hesitation, Luffy sets out to the blazing island, with Vice Admiral Smoker hot on his tail. On the supposedly death-ridden and empty island, the Straw Hats soon must contend with both the G-5 Marines, led by Vice Admiral Smoker, and the mad scientist Caesar Clown, whose deadly experiments must be stopped.", - "poster_path": "/slTtfpqvqelTNoRTxTuiSvqWoTU.jpg", - "season_number": 15, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 50, - "id": 49195, - "name": "Dressrosa", - "overview": "The Straw Hat Pirates and Trafalgar Law, together with Kin'emon, Momonosuke and the captured Caesar Clown, travel to Dressrosa with the goal of taking down the nation's king, Warlord of the Sea Donquixote Doflamingo. However, they soon set into motion a series of world-changing events, as their actions interact unexpectedly with those of larger forces at play.", - "poster_path": "/sDzpqSCuCyvKIcJADOhPD261maG.jpg", - "season_number": 16, - "vote_average": 9 - }, - { - "air_date": null, - "episode_count": 56, - "id": 63735, - "name": "Dressrosa (2)", - "overview": "A sequence of unexpected events shakes the world order, and Doflamingo proves to be a challenge that even some of the strongest warriors cannot overcome.", - "poster_path": "/nXyJ2Yor5VUX8Zpwf0eQbuDOsF0.jpg", - "season_number": 17, - "vote_average": 9 - }, - { - "air_date": "2016-07-12", - "episode_count": 55, - "id": 78873, - "name": "Zou", - "overview": "After defeating Doflamingo, the Straw Hats, Trafalgar Law, Kin'emon, and Kanjuro arrive on Zou, in order to reunite with Sanji and the others. However, they discover that Sanji has been swept up in a set of personal and political entanglements and that Zou has been subjected to a siege by Jack of the Beasts Pirates.", - "poster_path": "/wg7ngI5lw0u54xRY5FwmlvzS9cu.jpg", - "season_number": 18, - "vote_average": 9 - }, - { - "air_date": "2017-09-05", - "episode_count": 74, - "id": 91905, - "name": "Whole Cake Island", - "overview": "Luffy, Nami, Chopper, Brook, and the minks Pekoms, Pedro, and Carrot head to Whole Cake Island, where Big Mom of the Four Emperors resides. Nicknamed the Sanji Retrieval Team, the group seeks to rescue their crewmate Sanji from his arranged marriage with Charlotte Pudding, set up to finalize a political alliance between the Charlotte Family and the Vinsmoke Family. However, during their operation, they become involved in a plot to assassinate Big Mom herself.", - "poster_path": "/59G8pVHbFqSuAQAitdK9CKGAZXX.jpg", - "season_number": 19, - "vote_average": 8.9 - }, - { - "air_date": "2019-04-03", - "episode_count": 14, - "id": 121027, - "name": "Levely Arc", - "overview": "The Straw Hat Pirates' actions against the Big Mom Pirates are revealed to the world. Luffy's group is on its way to Wano Country while the Revolutionary Army prepares for their next move. Meanwhile, royalty across the globe gathers for the Levely, without knowing that a shadow-like figure is pulling the strings of the World.", - "poster_path": "/huF0TU9U8UIt2BaLGn6Ujbjikbg.jpg", - "season_number": 20, - "vote_average": 8.6 - }, - { - "air_date": "2019-07-09", - "episode_count": 197, - "id": 125830, - "name": "Wano Country Arc", - "overview": "The Ninja-Pirate-Mink-Samurai Alliance gather their forces in Wano Country and prepare for their inevitable clash against the Beasts Pirates. The history of Kozuki Oden and his ties to Wano Country, Whitebeard and Gol D. Roger are revealed, and the Alliance assaults Onigashima to take down the allied forces of Kaidou and Big Mom once and for all. The resulting battle, as well as the events during the recent Levely, cause the world to go through dramatic changes.", - "poster_path": "/awSahTRht2V11NKVp8KaMyd3z2v.jpg", - "season_number": 21, - "vote_average": 8.2 - }, - { - "air_date": null, - "episode_count": 28, - "id": 364569, - "name": "Egghead", - "overview": "The aftermaths of both the Levely and the Raid on Onigashima, as well as the erasure of the Lulusia Kingdom, cause major shifts across the world that could lead to global war. The Straw Hat Pirates, following their Log Pose, arrive at the mysterious, futuristic island Egghead where the super genius Dr. Vegapunk resides. However, after being tipped off about Vegapunk's research into the Void Century, the World Government decides to dispatch a CP0 team to assassinate Vegapunk. Betrayal and intrigue on all sides leads to a Marine siege on the island that will escalate into an incident that will shock the world.", - "poster_path": "/fqOUJhVYQchjaxOPHiBJ6I7Gr1l.jpg", - "season_number": 22, - "vote_average": 9.8 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Returning Series", - "tagline": "Set sail for One Piece!", - "type": "Scripted", - "vote_average": 8.718, - "vote_count": 4541 - }, - { - "adult": false, - "backdrop_path": "/A6tMQAo6t6eRFCPhsrShmxZLqFB.jpg", - "created_by": [], - "episode_run_time": [ - 25 - ], - "first_air_date": "2009-04-05", - "genres": [ - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "http://www.hagaren.jp/fa/", - "id": 31911, - "in_production": false, - "languages": [ - "ja" - ], - "last_air_date": "2010-07-04", - "last_episode_to_air": { - "id": 761875, - "name": "Journey's End", - "overview": "As one shared journey ends, many journeys begin. Those most touched by the conflict which surrounded the Philosopher's Stone now go their separate ways. One thing is certain: they will meet again.", - "vote_average": 7.556, - "vote_count": 10, - "air_date": "2010-07-04", - "episode_number": 64, - "episode_type": "finale", - "production_code": "", - "runtime": 25, - "season_number": 1, - "show_id": 31911, - "still_path": "/jzCIX2bXrwTKfWApaJeTDWIASjj.jpg" - }, - "name": "Fullmetal Alchemist: Brotherhood", - "next_episode_to_air": null, - "networks": [ - { - "id": 94, - "logo_path": "/7RNXnyiMbjgqtPAjja13wchcrGI.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 160, - "logo_path": "/lUACMATs6jcscXIrzNCQzbvNVN5.png", - "name": "TBS", - "origin_country": "JP" - }, - { - "id": 201, - "logo_path": "/qNooLje0YQh1y3y9LUM2Y5QCtiF.png", - "name": "CBC", - "origin_country": "JP" - }, - { - "id": 3970, - "logo_path": "/9coKtCf4jSNCdSqGveVFyzvjrZt.png", - "name": "SBS", - "origin_country": "JP" - } - ], - "number_of_episodes": 64, - "number_of_seasons": 1, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "鋼の錬金術師 FULLMETAL ALCHEMIST", - "overview": "Disregard for alchemy’s laws ripped half of Edward Elric’s limbs from his body and left his brother Alphonse’s soul clinging to a suit of armor. To restore what was lost, the brothers seek the Philosopher’s Stone. Enemies and allies – the corrupt military, the Homunculi, and foreign alchemists – will alter the Elric brothers course, but their purpose will remain unchanged and their bond unbreakable.", - "popularity": 207.779, - "poster_path": "/8H4ej2NpujYVBPsW2smmzC8d2xU.jpg", - "production_companies": [ - { - "id": 2849, - "logo_path": "/cN3JNIKawjOMtfk0GBVIbsx69bg.png", - "name": "BONES", - "origin_country": "JP" - }, - { - "id": 2883, - "logo_path": "/rDYExnBV61jGQnkhVVrPN4Yl7O1.png", - "name": "Aniplex", - "origin_country": "JP" - }, - { - "id": 10038, - "logo_path": "/nCueXKwYIEXrZ5ofqSJBO1YcmRr.png", - "name": "Square Enix", - "origin_country": "JP" - }, - { - "id": 3363, - "logo_path": "/sj3vD7n63bTCih7bcf6GnWvRf1Q.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 151984, - "logo_path": null, - "name": "Techno Sound", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2009-08-26", - "episode_count": 20, - "id": 43387, - "name": "Specials", - "overview": "", - "poster_path": "/iQZNlUAUHUGcf9diIePkzkVcCOz.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2009-04-05", - "episode_count": 64, - "id": 43388, - "name": "Season 1", - "overview": "", - "poster_path": "/1cpXTzrUiMbqcCLsdxRfVIHJsEd.jpg", - "season_number": 1, - "vote_average": 6.9 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Ended", - "tagline": "", - "type": "Scripted", - "vote_average": 8.7, - "vote_count": 1980 - }, - { - "adult": false, - "backdrop_path": "/rBF8wVQN8hTWHspVZBlI3h7HZJ.jpg", - "created_by": [ - { - "id": 1245733, - "credit_id": "57bf827dc3a3684d3400183e", - "name": "Justin Roiland", - "original_name": "Justin Roiland", - "gender": 2, - "profile_path": "/wYApP38aXe6ZcEtlBAfNRxJTQQi.jpg" - }, - { - "id": 57194, - "credit_id": "57bf826fc3a3684d25001b3c", - "name": "Dan Harmon", - "original_name": "Dan Harmon", - "gender": 2, - "profile_path": "/gDwFosoyPTd0pmnKParzGj3kaMg.jpg" - } - ], - "episode_run_time": [ - 22 - ], - "first_air_date": "2013-12-02", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 10759, - "name": "Action & Adventure" - } - ], - "homepage": "http://www.adultswim.com/videos/rick-and-morty", - "id": 60625, - "in_production": true, - "languages": [ - "en" - ], - "last_air_date": "2023-12-17", - "last_episode_to_air": { - "id": 4694210, - "name": "Fear No Mort", - "overview": "A jaded Rick and Morty seek spooky thrills.", - "vote_average": 8.7, - "vote_count": 20, - "air_date": "2023-12-17", - "episode_number": 10, - "episode_type": "finale", - "production_code": "", - "runtime": 24, - "season_number": 7, - "show_id": 60625, - "still_path": "/4kKiVFbRxAPxcPDi7rPrUJjyMf6.jpg" - }, - "name": "Rick and Morty", - "next_episode_to_air": null, - "networks": [ - { - "id": 80, - "logo_path": "/tHZPHOLc6iF27G34cAZGPsMtMSy.png", - "name": "Adult Swim", - "origin_country": "US" - } - ], - "number_of_episodes": 71, - "number_of_seasons": 7, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Rick and Morty", - "overview": "Rick is a mentally-unbalanced but scientifically gifted old man who has recently reconnected with his family. He spends most of his time involving his young grandson Morty in dangerous, outlandish adventures throughout space and alternate universes. Compounded with Morty's already unstable family life, these events cause Morty much distress at home and school.", - "popularity": 546.308, - "poster_path": "/gdIrmf2DdY5mgN6ycVP0XlzKzbE.jpg", - "production_companies": [ - { - "id": 6760, - "logo_path": "/h3syDHowNmk61FzlW2GPY0vJCFh.png", - "name": "Williams Street", - "origin_country": "US" - }, - { - "id": 8300, - "logo_path": null, - "name": "Harmonious Claptrap", - "origin_country": "US" - }, - { - "id": 47394, - "logo_path": null, - "name": "Justin Roiland's Solo Vanity Card Productions", - "origin_country": "US" - }, - { - "id": 32542, - "logo_path": null, - "name": "Starburns Industries", - "origin_country": "US" - }, - { - "id": 131124, - "logo_path": null, - "name": "Green Portal Productions", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2016-10-25", - "episode_count": 35, - "id": 106178, - "name": "Specials", - "overview": "", - "poster_path": "/3my0MrOKCSYMw8VfLiiM9k00bdF.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2013-12-02", - "episode_count": 11, - "id": 60059, - "name": "Season 1", - "overview": "Rick and Morty visit a pawn shop in space, encounter various alternate and virtual realities, and meet the devil at his antique shop.", - "poster_path": "/5WexCcWEkcm7yVpOClOLICroGNO.jpg", - "season_number": 1, - "vote_average": 8 - }, - { - "air_date": "2015-07-26", - "episode_count": 10, - "id": 66738, - "name": "Season 2", - "overview": "After Rick and Morty decided to unfreeze time, they must deal with alien parasites, alternate Jerrys and a decaying, possibly non-existent dimension.", - "poster_path": "/zkhGdE29umuKwa6u6mm7e4cXvYY.jpg", - "season_number": 2, - "vote_average": 8.3 - }, - { - "air_date": "2017-04-01", - "episode_count": 10, - "id": 86926, - "name": "Season 3", - "overview": "Rick and Morty travel to Atlantis and take some time to relax, plus Rick turns himself into a pickle and faces off against the president.", - "poster_path": "/7kP0ykqRPyY5anbCOMlR1PtLj8Y.jpg", - "season_number": 3, - "vote_average": 8.2 - }, - { - "air_date": "2019-11-10", - "episode_count": 10, - "id": 128112, - "name": "Season 4", - "overview": "Everything and nothing makes sense when bizarre genius Rick and his grandson Morty take more interdimensional journeys that bend time and space.", - "poster_path": "/87abbwoOfm5MMCWoFewN8pNGZxW.jpg", - "season_number": 4, - "vote_average": 7.7 - }, - { - "air_date": "2021-06-20", - "episode_count": 10, - "id": 188470, - "name": "Season 5", - "overview": "Hold onto your butts — it’s season five, baby! Rick, Morty and the fam are back with ten all-new episodes that consume unheld butts. Sex, romance, testicle monsters… a guy named Mr. Nimbus… It’s everything you want, get your butt ready!", - "poster_path": "/8KdHdOAP8mM4TmykkXnpr6qkyUU.jpg", - "season_number": 5, - "vote_average": 7.2 - }, - { - "air_date": "2022-09-04", - "episode_count": 10, - "id": 302503, - "name": "Season 6", - "overview": "It’s season six and Rick and Morty are back! Pick up where we left them, worse for wear and down on their luck. Will they manage to bounce back for more adventures? Or will they get swept up in an ocean of piss! Who knows?! Piss! Family! Intrigue! A bunch of dinosaurs! More piss! Another can’t miss season of your favorite show.", - "poster_path": "/cvhNj9eoRBe5SxjCbQTkh05UP5K.jpg", - "season_number": 6, - "vote_average": 7.6 - }, - { - "air_date": "2023-10-15", - "episode_count": 10, - "id": 354041, - "name": "Season 7", - "overview": "Rick and Morty are back and sounding more like themselves than ever! It's season seven, and the possibilities are endless: what's up with Jerry? EVIL Summer?! And will they ever go back to the high school?! Maybe not! But let's find out! There's probably less piss than last season. \"Rick and Morty,\" 100 years! Or at least until season 10!", - "poster_path": "/OXy96OFiLDZIz9jT4Byxk1Hk6b.jpg", - "season_number": 7, - "vote_average": 7.6 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Returning Series", - "tagline": "Science makes sense, family doesn't.", - "type": "Scripted", - "vote_average": 8.699, - "vote_count": 9551 - }, - { - "adult": false, - "backdrop_path": "/iDnTAeR2WNA62XQG0ivtteDSjd5.jpg", - "created_by": [], - "episode_run_time": [], - "first_air_date": "2024-03-20", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "https://www.disneyplus.com/series/x-men-97/vc1XIz90ZNH5", - "id": 138502, - "in_production": true, - "languages": [ - "en" - ], - "last_air_date": "2024-05-15", - "last_episode_to_air": { - "id": 5195795, - "name": "Tolerance Is Extinction (3)", - "overview": "The X-Men's dream is put to the test as mutant-human relations reach a tipping point.", - "vote_average": 8.3, - "vote_count": 6, - "air_date": "2024-05-15", - "episode_number": 10, - "episode_type": "finale", - "production_code": "", - "runtime": 43, - "season_number": 1, - "show_id": 138502, - "still_path": "/uuhP8ILtwpIk4edTiZ9Tu6oGQQm.jpg" - }, - "name": "X-Men '97", - "next_episode_to_air": null, - "networks": [ - { - "id": 2739, - "logo_path": "/1edZOYAfoyZyZ3rklNSiUpXX30Q.png", - "name": "Disney+", - "origin_country": "" - } - ], - "number_of_episodes": 10, - "number_of_seasons": 1, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "X-Men '97", - "overview": "The X-Men, a band of mutants who use their uncanny gifts to protect a world that hates and fears them, are challenged like never before, forced to face a dangerous and unexpected new future.", - "popularity": 234.879, - "poster_path": "/9Ycz7yYRf9V4jk3YXwcZhFtbNcF.jpg", - "production_companies": [ - { - "id": 420, - "logo_path": "/hUzeosd33nzE5MCNsZxCGEKTXaQ.png", - "name": "Marvel Studios", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2024-03-20", - "episode_count": 10, - "id": 219363, - "name": "Season 1", - "overview": "Picking up where 'X-Men' left off, the X-Men are in a period of transition, struggling with the loss of Professor X. And while their world is in a strained state of calm when it comes to mutant-human relations—everyone knows that's likely temporary.", - "poster_path": "/cVlBAB0nFEQxwuyn1mTfrGjqXuw.jpg", - "season_number": 1, - "vote_average": 8.5 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Returning Series", - "tagline": "New episodes. New era.", - "type": "Scripted", - "vote_average": 8.687, - "vote_count": 385 - }, - { - "adult": false, - "backdrop_path": "/7BoRhg8zXP0ca9Zql4p8llCFR2P.jpg", - "created_by": [ - { - "id": 2859557, - "credit_id": "657f9601025764060a47e5bd", - "name": "Shin Yoo-dam", - "original_name": "Shin Yoo-dam", - "gender": 0, - "profile_path": null - } - ], - "episode_run_time": [ - 63 - ], - "first_air_date": "2024-01-01", - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 35, - "name": "Comedy" - } - ], - "homepage": "https://tvn.cjenm.com/ko/Marrymyhusband/", - "id": 221851, - "in_production": false, - "languages": [ - "ko" - ], - "last_air_date": "2024-02-20", - "last_episode_to_air": { - "id": 4941688, - "name": "Episode 16", - "overview": "With Su-min's disappearance after Min-hwan's death, the fate intertwined with Ji-won finally dissolves. Ji-won receives a formal invitation to Chairman Yu Han-il's home and starts planning her future with Ji-hyuk. Just as they are about to attain their happiness, Su-min reappears to conclude the long-forged tragic fate.", - "vote_average": 0, - "vote_count": 0, - "air_date": "2024-02-20", - "episode_number": 16, - "episode_type": "finale", - "production_code": "", - "runtime": 67, - "season_number": 1, - "show_id": 221851, - "still_path": "/mAqCmdKDFNcujU79g9465VKBiL8.jpg" - }, - "name": "Marry My Husband", - "next_episode_to_air": null, - "networks": [ - { - "id": 866, - "logo_path": "/aRDq8zBrX3YLpHSfueNQBkNnn7b.png", - "name": "tvN", - "origin_country": "KR" - } - ], - "number_of_episodes": 16, - "number_of_seasons": 1, - "origin_country": [ - "KR" - ], - "original_language": "ko", - "original_name": "내 남편과 결혼해줘", - "overview": "Kang Ji-won, a terminally ill cancer patient, is killed by her husband and best friend after she witnesses them having an affair. She wakes up 10 years before the incident and decides to seek revenge with the help of Yu Ji-hyuk, a director at the company where she works. Now, she must reclaim her fate and eliminate the trash from her life.", - "popularity": 143.323, - "poster_path": "/JV3DXl1fITfoyHtyPzNuZyzh8q.jpg", - "production_companies": [ - { - "id": 115704, - "logo_path": "/lHIQ7aVEcYQBLRlHJqR9RNjLe4V.png", - "name": "DK E&M", - "origin_country": "KR" - }, - { - "id": 86418, - "logo_path": "/vzzqRwqTin3iAAMw2JlrmVPNnPa.png", - "name": "Studio Dragon", - "origin_country": "KR" - }, - { - "id": 128404, - "logo_path": "/dP3usmr6di1jMPH738rvbxdkmSQ.png", - "name": "CJ ENM", - "origin_country": "KR" - } - ], - "production_countries": [ - { - "iso_3166_1": "KR", - "name": "South Korea" - } - ], - "seasons": [ - { - "air_date": "2024-01-01", - "episode_count": 16, - "id": 331669, - "name": "Season 1", - "overview": "Life takes an unexpected turn for Kang Ji-won, who witnesses her husband and her best friend having an affair. Ji-won is killed, but miraculously travels back ten years in time, given the chance to re-do her life. In her quest for changing fate, she partners with Ji-hyuk and seeks a way to pass on her unfortunate fate to the two betrayers - her husband and her best friend.", - "poster_path": "/JV3DXl1fITfoyHtyPzNuZyzh8q.jpg", - "season_number": 1, - "vote_average": 7.6 - } - ], - "spoken_languages": [ - { - "english_name": "Korean", - "iso_639_1": "ko", - "name": "한국어/조선말" - } - ], - "status": "Ended", - "tagline": "A drama about creating a new destiny.", - "type": "Scripted", - "vote_average": 8.683, - "vote_count": 347 - }, - { - "adult": false, - "backdrop_path": "/hPea3Qy5Gd6z4kJLUruBbwAH8Rm.jpg", - "created_by": [ - { - "id": 24951, - "credit_id": "52599cb3760ee34661b60d9a", - "name": "Peter Gould", - "original_name": "Peter Gould", - "gender": 2, - "profile_path": "/a2dJSpUiXQ2NAxqSzztr6WsnhOJ.jpg" - }, - { - "id": 66633, - "credit_id": "52599cb3760ee34661b60d94", - "name": "Vince Gilligan", - "original_name": "Vince Gilligan", - "gender": 2, - "profile_path": "/z3E0DhBg1V1PZVEtS9vfFPzOWYB.jpg" - } - ], - "episode_run_time": [], - "first_air_date": "2015-02-08", - "genres": [ - { - "id": 80, - "name": "Crime" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "https://www.amc.com/shows/better-call-saul--1002228", - "id": 60059, - "in_production": false, - "languages": [ - "en", - "de", - "es" - ], - "last_air_date": "2022-08-15", - "last_episode_to_air": { - "id": 3641954, - "name": "Saul Gone", - "overview": "Revelations. Regrets. RICO violations. Jimmy's worlds — and identities — converge in one final showdown.", - "vote_average": 9.331, - "vote_count": 62, - "air_date": "2022-08-15", - "episode_number": 13, - "episode_type": "finale", - "production_code": "", - "runtime": 70, - "season_number": 6, - "show_id": 60059, - "still_path": "/aZFwz8FaM9MXFqwakFnhhNjYZSv.jpg" - }, - "name": "Better Call Saul", - "next_episode_to_air": null, - "networks": [ - { - "id": 174, - "logo_path": "/alqLicR1ZMHMaZGP3xRQxn9sq7p.png", - "name": "AMC", - "origin_country": "US" - } - ], - "number_of_episodes": 63, - "number_of_seasons": 6, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Better Call Saul", - "overview": "Six years before Saul Goodman meets Walter White. We meet him when the man who will become Saul Goodman is known as Jimmy McGill, a small-time lawyer searching for his destiny, and, more immediately, hustling to make ends meet. Working alongside, and, often, against Jimmy, is “fixer” Mike Ehrmantraut. The series tracks Jimmy’s transformation into Saul Goodman, the man who puts “criminal” in “criminal lawyer\".", - "popularity": 388.408, - "poster_path": "/fC2HDm5t0kHl7mTm7jxMR31b7by.jpg", - "production_companies": [ - { - "id": 11073, - "logo_path": "/aCbASRcI1MI7DXjPbSW9Fcv9uGR.png", - "name": "Sony Pictures Television Studios", - "origin_country": "US" - }, - { - "id": 2605, - "logo_path": null, - "name": "Gran Via Productions", - "origin_country": "US" - }, - { - "id": 33742, - "logo_path": null, - "name": "High Bridge Productions", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2015-11-10", - "episode_count": 6, - "id": 64929, - "name": "Specials", - "overview": "", - "poster_path": "/oaF4Fj0FafTEK2CX9aiIW42oABe.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2015-02-08", - "episode_count": 10, - "id": 60223, - "name": "Season 1", - "overview": "Jimmy McGill was a small-time lawyer, hustling to make ends meet. This is how the search for his destiny and the story of Saul Goodman collide.", - "poster_path": "/bAbZBZmz25Lqk8A8mwMWzAkvlAj.jpg", - "season_number": 1, - "vote_average": 8.3 - }, - { - "air_date": "2016-02-15", - "episode_count": 10, - "id": 72040, - "name": "Season 2", - "overview": "Jimmy McGill returns with a new outlook on life and growing appetites that will push his career -- and his relationships -- into uncharted territory.", - "poster_path": "/4NDwAQjFD8bTOsMKxYdl8IK10R9.jpg", - "season_number": 2, - "vote_average": 8.1 - }, - { - "air_date": "2017-04-10", - "episode_count": 10, - "id": 83956, - "name": "Season 3", - "overview": "Jimmy resorts to ever more desperate measures to keep his law career afloat, while Mike is drawn into the orbit of a mysterious new figure.", - "poster_path": "/dHIMW3CkL21jYWtsHiAdwkCjAej.jpg", - "season_number": 3, - "vote_average": 8.5 - }, - { - "air_date": "2018-08-06", - "episode_count": 10, - "id": 104603, - "name": "Season 4", - "overview": "As Jimmy copes with a shocking loss, a series of shady schemes propel him deeper into the criminal world -- and closer to his life as Saul Goodman.", - "poster_path": "/8zvIqLFOrBymKKI3L2W1AH8YZQI.jpg", - "season_number": 4, - "vote_average": 8.5 - }, - { - "air_date": "2020-02-23", - "episode_count": 10, - "id": 136162, - "name": "Season 5", - "overview": "Changing his name to Saul Goodman, Jimmy recruits a new crop of clients. Kim wrestles with a moral dilemma at work. Lalo's feud with Gus heats up.", - "poster_path": "/dZHa2vUtYNQ81KV38eHGjn0P4JE.jpg", - "season_number": 5, - "vote_average": 8.7 - }, - { - "air_date": "2022-04-18", - "episode_count": 13, - "id": 243392, - "name": "Season 6", - "overview": "Showdowns, dirty deeds and a flood of new clients: Jimmy's transformation comes full circle.", - "poster_path": "/rbNc44otT6VRd7QpxqlUAMyByaQ.jpg", - "season_number": 6, - "vote_average": 8.7 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "German", - "iso_639_1": "de", - "name": "Deutsch" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - } - ], - "status": "Ended", - "tagline": "Putting the \"criminal\" in \"criminal lawyer.\"", - "type": "Scripted", - "vote_average": 8.679, - "vote_count": 4996 - }, - { - "adult": false, - "backdrop_path": "/70YdbMELM4b8x8VXjlubymb2bQ0.jpg", - "created_by": [ - { - "id": 1223198, - "credit_id": "58e43eb492514127f6026873", - "name": "Moira Walley-Beckett", - "original_name": "Moira Walley-Beckett", - "gender": 1, - "profile_path": "/1sRNcxMZVsVcY6NFNQzASJuR8By.jpg" - } - ], - "episode_run_time": [ - 47 - ], - "first_air_date": "2017-03-19", - "genres": [ - { - "id": 18, - "name": "Drama" - }, - { - "id": 10751, - "name": "Family" - } - ], - "homepage": "http://www.cbc.ca/anne/", - "id": 70785, - "in_production": false, - "languages": [ - "en", - "pt" - ], - "last_air_date": "2019-11-24", - "last_episode_to_air": { - "id": 1985358, - "name": "The Better Feeling of My Heart", - "overview": "As the students prepare to depart for Queen’s College, Gilbert takes a final chance. Marilla intervenes on Diana’s behalf. Anne embraces her future but finds that change also brings loss. Elijah returns to Avonlea. Anne has a fateful encounter in Charlottetown. Series finale.", - "vote_average": 7.5, - "vote_count": 10, - "air_date": "2019-11-24", - "episode_number": 10, - "episode_type": "finale", - "production_code": "", - "runtime": 45, - "season_number": 3, - "show_id": 70785, - "still_path": "/vD9TdKbzOZTFbqrlEu2JZZVtvDD.jpg" - }, - "name": "Anne with an E", - "next_episode_to_air": null, - "networks": [ - { - "id": 23, - "logo_path": "/cw5WW6cc9UANam4A6o1BDua9njN.png", - "name": "CBC Television", - "origin_country": "CA" - } - ], - "number_of_episodes": 27, - "number_of_seasons": 3, - "origin_country": [ - "CA" - ], - "original_language": "en", - "original_name": "Anne with an E", - "overview": "A coming-of-age story about an outsider who, against all odds and numerous challenges, fights for love and acceptance and for her place in the world. The series centers on a young orphaned girl in the late 1890’s, who, after an abusive childhood spent in orphanages and the homes of strangers, is mistakenly sent to live with an elderly woman and her aging brother. Over time, 13-year-old Anne will transform their lives and eventually the small town in which they live with her unique spirit, fierce intellect and brilliant imagination.", - "popularity": 155.316, - "poster_path": "/6P6tXhjT5tK3qOXzxF9OMLlG7iz.jpg", - "production_companies": [ - { - "id": 88009, - "logo_path": null, - "name": "Northwood Entertainment", - "origin_country": "" - }, - { - "id": 152825, - "logo_path": null, - "name": "Northwood Pictures", - "origin_country": "" - } - ], - "production_countries": [ - { - "iso_3166_1": "CA", - "name": "Canada" - } - ], - "seasons": [ - { - "air_date": "2017-03-19", - "episode_count": 7, - "id": 86320, - "name": "Season 1", - "overview": "A young orphan's arrival in Avonlea affects the hearts and minds of everyone she meets, beginning with the pair of aging siblings who take her in.", - "poster_path": "/lqoGVD3FCahM9faB2SWdpae9Ejt.jpg", - "season_number": 1, - "vote_average": 8.2 - }, - { - "air_date": "2018-09-23", - "episode_count": 10, - "id": 104920, - "name": "Season 2", - "overview": "Anne's beloved world of Green Gables becomes a much bigger place, with new faces and heartfelt lessons about love, loss and growing up.", - "poster_path": "/7bjv63bF07F2SiN6PoJHYqmYRoR.jpg", - "season_number": 2, - "vote_average": 8.1 - }, - { - "air_date": "2019-09-22", - "episode_count": 10, - "id": 131544, - "name": "Season 3", - "overview": "", - "poster_path": "/hSjv6QkGknuJrB8LTjYFv5SPjrr.jpg", - "season_number": 3, - "vote_average": 8 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Portuguese", - "iso_639_1": "pt", - "name": "Português" - } - ], - "status": "Canceled", - "tagline": "Welcome back to Green Gables.", - "type": "Scripted", - "vote_average": 8.678, - "vote_count": 4600 - }, - { - "adult": false, - "backdrop_path": "/3MC8VIxq8u1vKOKTfz6FtrFXuMZ.jpg", - "created_by": [ - { - "id": 1251237, - "credit_id": "62d3d7c553f8330401f550ff", - "name": "Hong Mi-ran", - "original_name": "홍미란", - "gender": 1, - "profile_path": "/zdsUkZRfYZdh76Y6Cd2g9wTcFW1.jpg" - }, - { - "id": 1251238, - "credit_id": "62d3d7bf91745b004cbaf09b", - "name": "Hong Jeong-eun", - "original_name": "홍정은", - "gender": 1, - "profile_path": "/esIyjpCEh7MK087ivjOisJ7ZOKj.jpg" - }, - { - "id": 1463872, - "credit_id": "6480d9a199c964013b029591", - "name": "Park Joon-hwa", - "original_name": "Park Joon-hwa", - "gender": 2, - "profile_path": "/etjHXvHDpfFqCwZCfGhhg8L9oUY.jpg" - } - ], - "episode_run_time": [ - 75 - ], - "first_air_date": "2022-06-18", - "genres": [ - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 9648, - "name": "Mystery" - } - ], - "homepage": "https://program.tving.com/tvn/alchemyofsouls", - "id": 135157, - "in_production": false, - "languages": [ - "ko" - ], - "last_air_date": "2023-01-08", - "last_episode_to_air": { - "id": 3926131, - "name": "Episode 10", - "overview": "Jin Ho-gyeong takes a risk to protect Jinyowon and its treasures from attack. Having had a glimpse into the future, Uk braces for the inevitable.", - "vote_average": 9, - "vote_count": 2, - "air_date": "2023-01-08", - "episode_number": 10, - "episode_type": "standard", - "production_code": "", - "runtime": 84, - "season_number": 2, - "show_id": 135157, - "still_path": "/rcKP1eYnwXRLJa2tQqEZnJ1fKSh.jpg" - }, - "name": "Alchemy of Souls", - "next_episode_to_air": null, - "networks": [ - { - "id": 866, - "logo_path": "/aRDq8zBrX3YLpHSfueNQBkNnn7b.png", - "name": "tvN", - "origin_country": "KR" - } - ], - "number_of_episodes": 30, - "number_of_seasons": 2, - "origin_country": [ - "KR" - ], - "original_language": "ko", - "original_name": "환혼", - "overview": "A powerful sorceress in a blind woman's body encounters a man from a prestigious family, who wants her help to change his destiny.", - "popularity": 158.371, - "poster_path": "/q2IiPRSXPOZ6qVRj36WRAYEQyHs.jpg", - "production_companies": [ - { - "id": 86418, - "logo_path": "/vzzqRwqTin3iAAMw2JlrmVPNnPa.png", - "name": "Studio Dragon", - "origin_country": "KR" - }, - { - "id": 216772, - "logo_path": null, - "name": "T.S Narincinema", - "origin_country": "KR" - } - ], - "production_countries": [ - { - "iso_3166_1": "KR", - "name": "South Korea" - } - ], - "seasons": [ - { - "air_date": "2022-08-13", - "episode_count": 2, - "id": 304582, - "name": "Specials", - "overview": "", - "poster_path": "/bl8c0iKCXcdoEZdFRl1d1U4i0qJ.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2022-06-18", - "episode_count": 20, - "id": 213453, - "name": "Part 1", - "overview": "A powerful sorceress in a blind woman's body encounters a man from a prestigious family, who wants her help to change his destiny.", - "poster_path": "/lPPZW1nZhVQ3B0GnP4ZZ4Q3ZGdL.jpg", - "season_number": 1, - "vote_average": 8.9 - }, - { - "air_date": "2022-12-10", - "episode_count": 10, - "id": 306954, - "name": "Part 2: Light & Shadow", - "overview": "Jang Uk, now a fierce but troubled hunter of the soul shifters, meets an imprisoned young woman who seeks his help to reclaim her freedom.", - "poster_path": "/i6XtaT8oiAkIKhN6LZgoau3BHic.jpg", - "season_number": 2, - "vote_average": 9.7 - } - ], - "spoken_languages": [ - { - "english_name": "Korean", - "iso_639_1": "ko", - "name": "한국어/조선말" - } - ], - "status": "Ended", - "tagline": "Stay close, so no one can attack us!", - "type": "Scripted", - "vote_average": 8.673, - "vote_count": 535 - }, - { - "adult": false, - "backdrop_path": "/900tHlUYUkp7Ol04XFSoAaEIXcT.jpg", - "created_by": [ - { - "id": 35796, - "credit_id": "5ca7a5990e0a264c69f04ea8", - "name": "Craig Mazin", - "original_name": "Craig Mazin", - "gender": 2, - "profile_path": "/uEhna6qcMuyU5TP7irpTUZ2ZsZc.jpg" - } - ], - "episode_run_time": [], - "first_air_date": "2019-05-06", - "genres": [ - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "https://www.hbo.com/chernobyl", - "id": 87108, - "in_production": false, - "languages": [ - "en" - ], - "last_air_date": "2019-06-03", - "last_episode_to_air": { - "id": 1747127, - "name": "Vichnaya Pamyat", - "overview": "Valery Legasov, Boris Shcherbina and Ulana Khomyuk risk their lives and reputations to expose the truth about Chernobyl.", - "vote_average": 9.305, - "vote_count": 164, - "air_date": "2019-06-03", - "episode_number": 5, - "episode_type": "finale", - "production_code": "", - "runtime": 73, - "season_number": 1, - "show_id": 87108, - "still_path": "/mgXm2Y6SOFDHtD5thi2LmS7uQBj.jpg" - }, - "name": "Chernobyl", - "next_episode_to_air": null, - "networks": [ - { - "id": 49, - "logo_path": "/tuomPhY2UtuPTqqFnKMVHvSb724.png", - "name": "HBO", - "origin_country": "US" - } - ], - "number_of_episodes": 5, - "number_of_seasons": 1, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "Chernobyl", - "overview": "The true story of one of the worst man-made catastrophes in history: the catastrophic nuclear accident at Chernobyl. A tale of the brave men and women who sacrificed to save Europe from unimaginable disaster.", - "popularity": 128.764, - "poster_path": "/hlLXt2tOPT6RRnjiUmoxyG1LTFi.jpg", - "production_companies": [ - { - "id": 112447, - "logo_path": "/kL6jD0jB836NqSfBusvjmYX1wAB.png", - "name": "SISTER", - "origin_country": "GB" - }, - { - "id": 115241, - "logo_path": null, - "name": "The Mighty Mint", - "origin_country": "US" - }, - { - "id": 119645, - "logo_path": null, - "name": "Word Games", - "origin_country": "US" - } - ], - "production_countries": [ - { - "iso_3166_1": "GB", - "name": "United Kingdom" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2019-05-05", - "episode_count": 5, - "id": 119454, - "name": "Miniseries", - "overview": "", - "poster_path": "/hlLXt2tOPT6RRnjiUmoxyG1LTFi.jpg", - "season_number": 1, - "vote_average": 9.1 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Ended", - "tagline": "What is the cost of lies?", - "type": "Miniseries", - "vote_average": 8.673, - "vote_count": 6099 - }, - { - "adult": false, - "backdrop_path": "/cHyY5z4txdVyGtYMvBJhCqCcJso.jpg", - "created_by": [ - { - "id": 1853492, - "credit_id": "5db5110ad40d4c0012fc0a10", - "name": "Dana Terrace", - "original_name": "Dana Terrace", - "gender": 1, - "profile_path": null - } - ], - "episode_run_time": [ - 22 - ], - "first_air_date": "2020-01-10", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 35, - "name": "Comedy" - } - ], - "homepage": "https://disneynow.com/shows/the-owl-house", - "id": 92685, - "in_production": false, - "languages": [ - "da", - "es", - "en", - "pt" - ], - "last_air_date": "2023-04-08", - "last_episode_to_air": { - "id": 3954937, - "name": "Watching and Dreaming", - "overview": "The fate of the Boiling Isles rests on the shoulders of a human, a cursed witch and a little King.", - "vote_average": 8.3, - "vote_count": 9, - "air_date": "2023-04-08", - "episode_number": 3, - "episode_type": "finale", - "production_code": "303", - "runtime": 55, - "season_number": 3, - "show_id": 92685, - "still_path": "/1NRYnIEMmkgrkDsFgMfLrpVS1uh.jpg" - }, - "name": "The Owl House", - "next_episode_to_air": null, - "networks": [ - { - "id": 54, - "logo_path": "/rxhJszKVAvAZYTmF0vfRHfyo4Fb.png", - "name": "Disney Channel", - "origin_country": "US" - } - ], - "number_of_episodes": 43, - "number_of_seasons": 3, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "The Owl House", - "overview": "An animated fantasy-comedy series that follows Luz, a self-assured teenage girl who accidentally stumbles upon a portal to a magical world where she befriends a rebellious witch, Eda, and an adorably tiny warrior, King. Despite not having magical abilities, Luz pursues her dream of becoming a witch by serving as Eda's apprentice at the Owl House and ultimately finds a new family in an unlikely setting.", - "popularity": 231.732, - "poster_path": "/zhdy3PcNVE15wj1wrxn45ARZBnx.jpg", - "production_companies": [ - { - "id": 3475, - "logo_path": "/jTPNzDEn7eHmp3nEXEEtkHm6jLg.png", - "name": "Disney Television Animation", - "origin_country": "US" - }, - { - "id": 142198, - "logo_path": "/p01DTJ87SKywfMdvTqwmAp5Fmh7.png", - "name": "Rough Draft Korea", - "origin_country": "KR" - } - ], - "production_countries": [ - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2020-04-04", - "episode_count": 5, - "id": 200842, - "name": "Specials", - "overview": "", - "poster_path": "/yr2EpMCgn7525kZ0rsfWP6UQDn8.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2020-01-10", - "episode_count": 19, - "id": 130506, - "name": "Season 1", - "overview": "", - "poster_path": "/qi5krqO5eE0vKRhzsO3K07pP5wq.jpg", - "season_number": 1, - "vote_average": 7.7 - }, - { - "air_date": "2021-06-12", - "episode_count": 21, - "id": 195681, - "name": "Season 2", - "overview": "", - "poster_path": "/aLn1OO2qL9nsHJgtIf2x821eAPr.jpg", - "season_number": 2, - "vote_average": 8.5 - }, - { - "air_date": "2022-10-15", - "episode_count": 3, - "id": 307729, - "name": "Season 3", - "overview": "", - "poster_path": "/saDIfdPlAn5vzKfQzhI5BxSU1Rn.jpg", - "season_number": 3, - "vote_average": 8.8 - } - ], - "spoken_languages": [ - { - "english_name": "Danish", - "iso_639_1": "da", - "name": "Dansk" - }, - { - "english_name": "Spanish", - "iso_639_1": "es", - "name": "Español" - }, - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - }, - { - "english_name": "Portuguese", - "iso_639_1": "pt", - "name": "Português" - } - ], - "status": "Ended", - "tagline": "Us weirdos have to stick together.", - "type": "Scripted", - "vote_average": 8.666, - "vote_count": 1544 - }, - { - "adult": false, - "backdrop_path": "/3GQKYh6Trm8pxd2AypovoYQf4Ay.jpg", - "created_by": [], - "episode_run_time": [], - "first_air_date": "2019-04-06", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "https://kimetsu.com/anime", - "id": 85937, - "in_production": true, - "languages": [ - "ja" - ], - "last_air_date": "2024-06-30", - "last_episode_to_air": { - "id": 5337557, - "name": "The Hashira Unite", - "overview": "During a silent night when the moon shines, Kagaya finally meets Muzan Kibutsuji, who appears at the Ubuyashiki Mansion.", - "vote_average": 9, - "vote_count": 3, - "air_date": "2024-06-30", - "episode_number": 8, - "episode_type": "finale", - "production_code": "", - "runtime": 41, - "season_number": 5, - "show_id": 85937, - "still_path": "/a8QEWBNIfRzXN7g5WOdrPS3QeKy.jpg" - }, - "name": "Demon Slayer: Kimetsu no Yaiba", - "next_episode_to_air": null, - "networks": [ - { - "id": 1, - "logo_path": "/4x4GsmRmSLLL0RVNKsoqAVH43tz.png", - "name": "Fuji TV", - "origin_country": "JP" - }, - { - "id": 343, - "logo_path": "/9rNqtDYAnD6yTOutvHI3synSEs2.png", - "name": "Gunma TV", - "origin_country": "JP" - }, - { - "id": 614, - "logo_path": "/hSdroyVthq3CynxTIIY7lnS8w1.png", - "name": "Tokyo MX", - "origin_country": "JP" - }, - { - "id": 861, - "logo_path": "/JQ5bx6n7Qmdmyqz6sqjo5Fz2iR.png", - "name": "BS11", - "origin_country": "JP" - }, - { - "id": 879, - "logo_path": "/pX3gDCsG8WcQvQbCNJ37t5w0HyG.png", - "name": "Tokai Television Broadcasting", - "origin_country": "JP" - }, - { - "id": 1163, - "logo_path": "/1J33ZvSff1VOEt3aC8CyKmj9GEy.png", - "name": "Kansai TV", - "origin_country": "JP" - }, - { - "id": 2478, - "logo_path": "/2v82HpzoKRveJEJcGHkeTcktMRM.png", - "name": "Tochigi TV", - "origin_country": "JP" - }, - { - "id": 3535, - "logo_path": "/sces9gh6ih1DaD54WXvqHeLMScE.png", - "name": "Fukui TV", - "origin_country": "JP" - }, - { - "id": 3721, - "logo_path": "/vkOmMDoyA8Jj8gDJOyP6CjD06Kj.png", - "name": "Hokkaido Cultural Broadcasting", - "origin_country": "JP" - }, - { - "id": 4799, - "logo_path": "/y1F9WoEjz7MhzjN56im3tVKTd1r.png", - "name": "Iwate Menkoi Television", - "origin_country": "JP" - }, - { - "id": 4825, - "logo_path": "/9dD3buakf1nS6XQVBwEtm50izs4.png", - "name": "TOS", - "origin_country": "JP" - }, - { - "id": 4829, - "logo_path": "/qHGklsa90XMreAdYm7AZl6eeaCL.png", - "name": "Sendai Television", - "origin_country": "JP" - }, - { - "id": 4839, - "logo_path": "/pRhoUkllLEe3U9341NUCeKdQ7to.png", - "name": "SAGA TV", - "origin_country": "JP" - }, - { - "id": 4841, - "logo_path": "/7QZ9b8bIpNUU5AjdaW6BXcMziY6.png", - "name": "Ishikawa TV", - "origin_country": "JP" - }, - { - "id": 4850, - "logo_path": "/thh0SqE1oh7oOH08ISphk6cRghq.png", - "name": "Television Nishinippon", - "origin_country": "JP" - }, - { - "id": 4851, - "logo_path": "/wd94E8WjZwEbu1PLxhNNH0Ny3VT.png", - "name": "OHK", - "origin_country": "JP" - }, - { - "id": 4855, - "logo_path": "/vRWtsyWIcIrtw0PXbCbjC4xvXtw.png", - "name": "Kochi Sun Sun Broadcasting", - "origin_country": "JP" - }, - { - "id": 4970, - "logo_path": "/6hrEhIW5lIUKeX78BNTzMQ0e8aK.png", - "name": "Television Shin Hiroshima System", - "origin_country": "JP" - }, - { - "id": 5644, - "logo_path": "/832SJcpnozaNWKto6hPSpYvDYQU.png", - "name": "TV Shizuoka", - "origin_country": "JP" - }, - { - "id": 6156, - "logo_path": "/gxpzF98cV1DHpXzJmXf2Ew6sQvV.png", - "name": "UMK TV Miyazaki", - "origin_country": "JP" - }, - { - "id": 6209, - "logo_path": "/fjenNun3vCLtnHHsTpAgVYkubMl.png", - "name": "NST", - "origin_country": "JP" - }, - { - "id": 6210, - "logo_path": "/kCNJcIxnOXI4fkc8oZLOk1BZb0o.png", - "name": "NBS", - "origin_country": "JP" - }, - { - "id": 6211, - "logo_path": "/mFM7fx4yt3FOa6leUbBbd8iGZIi.png", - "name": "Sakuranbo TV", - "origin_country": "JP" - }, - { - "id": 6212, - "logo_path": "/eAaH52WuIH4XNlqYSonXZRPRnGE.png", - "name": "TSK", - "origin_country": "JP" - }, - { - "id": 6213, - "logo_path": "/np5gbKJvysVLnJKg8g1OxhiA6Qa.png", - "name": "Ehime Broadcasting", - "origin_country": "JP" - }, - { - "id": 6214, - "logo_path": "/fF4u5E7SBK4qOoIUOVmr5FbYk2g.png", - "name": "KTS", - "origin_country": "JP" - }, - { - "id": 6666, - "logo_path": "/rCdk5TWd3RPKTZU1zlhDCEFuzsI.png", - "name": "Fukushima TV", - "origin_country": "JP" - }, - { - "id": 6670, - "logo_path": "/7OAJi6aS9zQWwP64jqxRllBvYKR.png", - "name": "NIB", - "origin_country": "JP" - }, - { - "id": 6819, - "logo_path": "/hNbCO6N6F4o09DCGAoz7g0G2E9F.png", - "name": "AKT", - "origin_country": "JP" - }, - { - "id": 6821, - "logo_path": "/mkTZDdapxuLVS4gzSCwD01DFkbw.png", - "name": "Toyama Television", - "origin_country": "JP" - }, - { - "id": 6822, - "logo_path": "/lquU1iSzXNKMWohDVIE91pxDzhE.png", - "name": "TV Kumamoto", - "origin_country": "JP" - }, - { - "id": 6823, - "logo_path": "/UQS8TXqK0b367KX6Vw0aOfMB.png", - "name": "Okinawa Television Broadcasting", - "origin_country": "JP" - } - ], - "number_of_episodes": 63, - "number_of_seasons": 5, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "鬼滅の刃", - "overview": "It is the Taisho Period in Japan. Tanjiro, a kindhearted boy who sells charcoal for a living, finds his family slaughtered by a demon. To make matters worse, his younger sister Nezuko, the sole survivor, has been transformed into a demon herself. Though devastated by this grim reality, Tanjiro resolves to become a “demon slayer” so that he can turn his sister back into a human, and kill the demon that massacred his family.", - "popularity": 223.229, - "poster_path": "/xUfRZu2mi8jH6SzQEJGP6tjBuYj.jpg", - "production_companies": [ - { - "id": 5887, - "logo_path": "/m6FEqz8rQECnmfjEwjNhNAlmhCJ.png", - "name": "ufotable", - "origin_country": "JP" - }, - { - "id": 2883, - "logo_path": "/rDYExnBV61jGQnkhVVrPN4Yl7O1.png", - "name": "Aniplex", - "origin_country": "JP" - }, - { - "id": 2918, - "logo_path": "/gyEWUBWwqrm3H5T2hkERD9LxpOq.png", - "name": "Shueisha", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2020-08-26", - "episode_count": 18, - "id": 131803, - "name": "Specials", - "overview": "", - "poster_path": "/dWdriunpZSHsKX5xrR5WwaY5c3R.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2019-04-06", - "episode_count": 26, - "id": 116882, - "name": "Tanjiro Kamado, Unwavering Resolve", - "overview": "Ever since the death of his father, the burden of supporting the family has fallen upon Tanjirou Kamado's shoulders. One day, Tanjirou decides to go down to the local village to make a little money selling charcoal. On his way back, night falls, forcing Tanjirou to take shelter in the house of a strange man, who warns him of the existence of flesh-eating demons that lurk in the woods at night.\n\nWhen he finally arrives back home the next day, he is met with a horrifying sight—his whole family has been slaughtered. Worse still, the sole survivor is his sister Nezuko, who has been turned into a bloodthirsty demon. Consumed by rage and hatred, Tanjirou swears to avenge his family and stay by his only remaining sibling. Alongside the mysterious group calling themselves the Demon Slayer Corps, Tanjirou will do whatever it takes to slay the demons and protect the remnants of his beloved sister's humanity.", - "poster_path": "/x2f3rK7GvxalWsa74H87PeVvsZo.jpg", - "season_number": 1, - "vote_average": 8.1 - }, - { - "air_date": "2021-10-10", - "episode_count": 7, - "id": 181846, - "name": "Mugen Train", - "overview": "A mysterious string of disappearances on a certain train has caught the attention of the Demon Slayer Corps, and they have sent one of their best to exterminate what can only be a demon responsible. However, the plan to board the Mugen Train is delayed by a lesser demon who is terrorizing the mechanics and targeting a kind, elderly woman and her granddaughter. Kyoujurou Rengoku, the Flame Hashira, must eliminate the threat before boarding the train.\n\nSent to assist the Hashira, Tanjirou Kamado, Inosuke Hashira, and Zenitsu Agatsuma enter the train prepared to fight. But their monstrous target already has a devious plan in store for them and the two hundred passengers: by delving deep into their consciousness, the demon intends to obliterate everyone in a stunning display of the power held by the Twelve Kizuki.", - "poster_path": "/yQ0c0Sha9qQbecSMFTA2bYtHByu.jpg", - "season_number": 2, - "vote_average": 8 - }, - { - "air_date": "2021-12-05", - "episode_count": 11, - "id": 215073, - "name": "Entertainment District", - "overview": "The devastation of the Mugen Train incident still weighs heavily on the members of the Demon Slayer Corps. Despite being given time to recover, life must go on, as the wicked never sleep: a vicious demon is terrorizing the alluring women of the Yoshiwara Entertainment District. The Sound Hashira, Tengen Uzui, and his three wives are on the case. However, when he soon loses contact with his spouses, Tengen fears the worst and enlists the help of Tanjirou Kamado, Zenitsu Agatsuma, and Inosuke Hashibira to infiltrate the district's most prominent houses and locate the depraved Upper Rank Demon.", - "poster_path": "/kyhi1OjpifFkfo8gXrRvf9jI7SJ.jpg", - "season_number": 3, - "vote_average": 7.7 - }, - { - "air_date": "2023-04-09", - "episode_count": 11, - "id": 243774, - "name": "Swordsmith Village", - "overview": "For centuries, the Demon Slayer Corps has sacredly kept the location of Swordsmith Village a secret. As the village of the greatest forgers, it provides Demon Slayers with the finest weapons, which allow them to fight night-crawling fiends and ensure the safety of humans. After his sword was chipped and deemed useless, Tanjirou Kamado, along with his precious little sister Nezuko, is escorted to the village to receive a new one.\n\nMeanwhile, the death of an Upper Rank Demon disturbs the idle order in the demon world. As Tanjirou becomes acquainted with Mist Hashira Muichirou Tokitou and Love Hashira Mitsuri Kanroji, ferocious powers creep from the shadows and threaten to shatter the Demon Slayers' greatest line of defense.", - "poster_path": "/6gD7G8HQay1X8mHiFVttWJ3czYb.jpg", - "season_number": 4, - "vote_average": 5.7 - }, - { - "air_date": "2024-05-12", - "episode_count": 8, - "id": 345811, - "name": "Hashira Training", - "overview": "", - "poster_path": "/htuO1MgCSVfcLYwU3YVSaO2H9iv.jpg", - "season_number": 5, - "vote_average": 7.8 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Returning Series", - "tagline": "", - "type": "Scripted", - "vote_average": 8.662, - "vote_count": 6270 - }, - { - "adult": false, - "backdrop_path": "/rqbCbjB19amtOtFQbb3K2lgm2zv.jpg", - "created_by": [], - "episode_run_time": [], - "first_air_date": "2013-04-07", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 10759, - "name": "Action & Adventure" - } - ], - "homepage": "https://shingeki.tv/", - "id": 1429, - "in_production": false, - "languages": [ - "ja" - ], - "last_air_date": "2022-04-04", - "last_episode_to_air": { - "id": 3508327, - "name": "The Dawn of Humanity", - "overview": "Regardless of where it all began, Eren commits to his path of destruction during the Scouts' first visit to the Marleyan mainland, leaving Mikasa to wonder if things could've been different.", - "vote_average": 8.7, - "vote_count": 23, - "air_date": "2022-04-04", - "episode_number": 28, - "episode_type": "standard", - "production_code": "", - "runtime": 23, - "season_number": 4, - "show_id": 1429, - "still_path": "/eu8TEJlYFWIWpPHyYw61JMMyPAB.jpg" - }, - "name": "Attack on Titan", - "next_episode_to_air": null, - "networks": [ - { - "id": 94, - "logo_path": "/7RNXnyiMbjgqtPAjja13wchcrGI.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 469, - "logo_path": "/3E5bxm9VfOU9LkAX545jtpKAe6Z.png", - "name": "NHK G", - "origin_country": "JP" - }, - { - "id": 614, - "logo_path": "/hSdroyVthq3CynxTIIY7lnS8w1.png", - "name": "Tokyo MX", - "origin_country": "JP" - } - ], - "number_of_episodes": 87, - "number_of_seasons": 4, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "進撃の巨人", - "overview": "Many years ago, the last remnants of humanity were forced to retreat behind the towering walls of a fortified city to escape the massive, man-eating Titans that roamed the land outside their fortress. Only the heroic members of the Scouting Legion dared to stray beyond the safety of the walls – but even those brave warriors seldom returned alive. Those within the city clung to the illusion of a peaceful existence until the day that dream was shattered, and their slim chance at survival was reduced to one horrifying choice: kill – or be devoured!", - "popularity": 132.381, - "poster_path": "/hTP1DtLGFamjfu8WqjnuQdP1n4i.jpg", - "production_companies": [ - { - "id": 529, - "logo_path": "/rwB6w2aPENQbx756pBWSw44Ouk.png", - "name": "Production I.G", - "origin_country": "JP" - }, - { - "id": 21444, - "logo_path": "/wSejGn3lAZdQ5muByxvzigwyDY6.png", - "name": "MAPPA", - "origin_country": "JP" - }, - { - "id": 31058, - "logo_path": "/1vwZPG0zMVRvThCY8Lljh0ppxQo.png", - "name": "WIT STUDIO", - "origin_country": "JP" - }, - { - "id": 9148, - "logo_path": "/rtW3NadfF4kR5mTW00ahiFxw6k7.png", - "name": "Pony Canyon", - "origin_country": "JP" - }, - { - "id": 151984, - "logo_path": null, - "name": "Techno Sound", - "origin_country": "JP" - }, - { - "id": 59118, - "logo_path": "/9nTCEBgGaaI5swkv8gy2vny0Mb5.png", - "name": "Kodansha", - "origin_country": "JP" - }, - { - "id": 1778, - "logo_path": "/b5rT6VbYza3LyfltCmz1OcqzWJM.png", - "name": "dentsu", - "origin_country": "JP" - }, - { - "id": 3363, - "logo_path": "/sj3vD7n63bTCih7bcf6GnWvRf1Q.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 170262, - "logo_path": null, - "name": "Pony Canyon Enterprise", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2013-07-07", - "episode_count": 37, - "id": 3789, - "name": "Specials", - "overview": "", - "poster_path": "/no3dkH44ywREi0la8tw4TnA1GxN.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2013-04-07", - "episode_count": 25, - "id": 3788, - "name": "Season 1", - "overview": "Centuries ago, mankind was slaughtered to near extinction by monstrous humanoid creatures called titans, forcing humans to hide in fear behind enormous concentric walls. What makes these giants truly terrifying is that their taste for human flesh is not born out of hunger but what appears to be out of pleasure. To ensure their survival, the remnants of humanity began living within defensive barriers, resulting in one hundred years without a single titan encounter. However, that fragile calm is soon shattered when a colossal titan manages to breach the supposedly impregnable outer wall, reigniting the fight for survival against the man-eating abominations.", - "poster_path": "/gC78bsXhdU2PwT3FkLcn8R5YcHb.jpg", - "season_number": 1, - "vote_average": 8.2 - }, - { - "air_date": "2017-04-01", - "episode_count": 12, - "id": 84756, - "name": "Season 2", - "overview": "Eren Yeager and others of the 104th Training Corps have just begun to become full members of the Survey Corps. As they ready themselves to face the Titans once again, their preparations are interrupted by the invasion of Wall Rose—but all is not as it seems as more mysteries are unraveled. As the Survey Corps races to save the wall, they uncover more about the invading Titans and the dark secrets of their own members.", - "poster_path": "/2fhK0wbFixskgRyuq6YvaMn75et.jpg", - "season_number": 2, - "vote_average": 8.4 - }, - { - "air_date": "2018-07-23", - "episode_count": 22, - "id": 98013, - "name": "Season 3", - "overview": "Eren and his companions in the 104th are assigned to the newly-formed Levi Squad, whose assignment is to keep Eren and Historia safe given Eren's newly-discovered power and Historia's knowledge and pedigree. Levi and Erwin have good reason to be concerned, because the priest of the Church that Hange had hidden away was found tortured to death, making it clear that the Military Police are involved with the cover-up. Things get more harrowing when the MPs make a move on Erwin and the Levi Squad narrowly avoids capture. Eren is also having problems with his Titan transformation, and a deadly killer has been hired to secure Eren and Historia, one Levi knows all too well from his youth.\n\nThen, hoping to retake Wall Maria and find the answers humanity seeks in Grisha's basement, Eren, Mikasa, Armin and the rest of the Survey Corps return to the town where everything began: Shiganshina.", - "poster_path": "/2F3sYFneiKcrwboD0bOqb29cGET.jpg", - "season_number": 3, - "vote_average": 8.5 - }, - { - "air_date": "2020-12-07", - "episode_count": 28, - "id": 126952, - "name": "The Final Season", - "overview": "The truth revealed through the memories of Grisha's journals shakes all of Eren's deepest beliefs. There is no rugged but free land beyond the walls. There is a whole other world, equally full of oppression and war. Suddenly, the ambitions that have animated the Survey Corps for generations seem small and naive. What is there left to fight for?", - "poster_path": "/iUsrnXfubNwhM8FRNEmzXmLfxB2.jpg", - "season_number": 4, - "vote_average": 8.5 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Ended", - "tagline": "", - "type": "Scripted", - "vote_average": 8.662, - "vote_count": 6195 - }, - { - "adult": false, - "backdrop_path": "/2w8FaLwwJTWr6ExUMeVgT2Th5YT.jpg", - "created_by": [ - { - "id": 4396168, - "credit_id": "657e1feb8f26bc13977517a6", - "name": "George Morikawa", - "original_name": "George Morikawa", - "gender": 2, - "profile_path": null - } - ], - "episode_run_time": [ - 24 - ], - "first_air_date": "2000-10-03", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 35, - "name": "Comedy" - }, - { - "id": 18, - "name": "Drama" - }, - { - "id": 10759, - "name": "Action & Adventure" - } - ], - "homepage": "http://www.vap.co.jp/ippo3/", - "id": 42705, - "in_production": false, - "languages": [ - "ja" - ], - "last_air_date": "2014-03-29", - "last_episode_to_air": { - "id": 993387, - "name": "A Vow", - "overview": "Kamogawa resorts to pounding a log with his bare fists as he trains to face Anderson and avenge Nekota. Anderson rediscovers his pride as a boxer and brings Miguel along as his cornerman. Everything comes down to this!", - "vote_average": 10, - "vote_count": 2, - "air_date": "2014-03-29", - "episode_number": 25, - "episode_type": "finale", - "production_code": "", - "runtime": 24, - "season_number": 3, - "show_id": 42705, - "still_path": "/wdUlvMixwd1aJJ68eKUewqTycHV.jpg" - }, - "name": "Fighting Spirit", - "next_episode_to_air": null, - "networks": [ - { - "id": 57, - "logo_path": "/uxaXSoT8K0S2NE5PWsBpHUl3GGU.png", - "name": "Nippon TV", - "origin_country": "JP" - } - ], - "number_of_episodes": 126, - "number_of_seasons": 3, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "はじめの一歩", - "overview": "Makunouchi Ippo is an ordinary high school student in Japan. Since he spends most of his time away from school helping his mother run the family business, he doesn't get to enjoy his younger years like most teenagers. Always a target for bullying at school (the family fishing business grants him a distinct odor), Ippo's life is one of hardship. One of these after-school bullying sessions turns Ippo's life around for the better, as he is saved by a boxer named Takamura. He decides to follow in Takamura's footsteps and train to become a boxer, giving his life direction and purpose. Ippo's path to perfecting his pugilistic prowess is just beginning...", - "popularity": 330.575, - "poster_path": "/i3U3J2MWovIBZBnZYYiOLBXqNJZ.jpg", - "production_companies": [ - { - "id": 3464, - "logo_path": "/9k0nr75nwnNeT2MHerf1OXJN0hj.png", - "name": "Madhouse", - "origin_country": "JP" - }, - { - "id": 21444, - "logo_path": "/wSejGn3lAZdQ5muByxvzigwyDY6.png", - "name": "MAPPA", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2003-03-21", - "episode_count": 3, - "id": 52312, - "name": "Specials", - "overview": "", - "poster_path": "/gjDkE5Oa707LaDWDihh8G3B9gHI.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2000-10-03", - "episode_count": 75, - "id": 52311, - "name": "The First Step", - "overview": "", - "poster_path": "/oG4xyOhHfNpsYXQysE7bYh3FBtX.jpg", - "season_number": 1, - "vote_average": 9.5 - }, - { - "air_date": "2009-01-06", - "episode_count": 26, - "id": 52313, - "name": "New Challenger", - "overview": "Ippo Makunouchi continues his boxing career and his goal on knowing the meaning of being strong, and the desire on fighting his idol Ichiro Miyata once again. Along him are pro boxers Takamura, Aoki and Kimura that each one of them aspire to their own dreams. the continuation after Ippo won his Japan Championship match.", - "poster_path": "/5PSYvbA1LXueNyDDPIwL11372VQ.jpg", - "season_number": 2, - "vote_average": 10 - }, - { - "air_date": "2013-10-06", - "episode_count": 25, - "id": 59715, - "name": "Rising", - "overview": "Hajime no Ippo: Rising continues Ippo's quest to become stronger, featuring the same cast of loveable dimwits from Kamogawa Gym, as they put their bodies and hearts on the line to make their way in the harsh world of professional boxing. With a will of iron, Ippo steps into the ring once again.", - "poster_path": "/vvj28BXa350Ft7DArhKKtk2yvhu.jpg", - "season_number": 3, - "vote_average": 10 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Ended", - "tagline": "The moment you back down is the moment you lose!", - "type": "Scripted", - "vote_average": 8.656, - "vote_count": 1012 - }, - { - "adult": false, - "backdrop_path": "/dfmPbyeZZSz3bekeESvMJaH91gS.jpg", - "created_by": [], - "episode_run_time": [], - "first_air_date": "2021-03-25", - "genres": [ - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - }, - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 18, - "name": "Drama" - } - ], - "homepage": "https://www.amazon.com/dp/B08WJP55PR", - "id": 95557, - "in_production": true, - "languages": [ - "en" - ], - "last_air_date": "2024-04-04", - "last_episode_to_air": { - "id": 5093140, - "name": "I THOUGHT YOU WERE STRONGER", - "overview": "An old enemy threatens everything Mark holds dear.", - "vote_average": 8.5, - "vote_count": 8, - "air_date": "2024-04-04", - "episode_number": 8, - "episode_type": "finale", - "production_code": "INVI 208", - "runtime": 54, - "season_number": 2, - "show_id": 95557, - "still_path": "/ryzxY6WuqbuQlg2TbnfQFDsyMoo.jpg" - }, - "name": "INVINCIBLE", - "next_episode_to_air": null, - "networks": [ - { - "id": 1024, - "logo_path": "/ifhbNuuVnlwYy5oXA5VIb2YR8AZ.png", - "name": "Prime Video", - "origin_country": "" - } - ], - "number_of_episodes": 16, - "number_of_seasons": 2, - "origin_country": [ - "US" - ], - "original_language": "en", - "original_name": "INVINCIBLE", - "overview": "Mark Grayson is a normal teenager except for the fact that his father is the most powerful superhero on the planet. Shortly after his seventeenth birthday, Mark begins to develop powers of his own and enters into his father’s tutelage.", - "popularity": 312.172, - "poster_path": "/dMOpdkrDC5dQxqNydgKxXjBKyAc.jpg", - "production_companies": [ - { - "id": 20580, - "logo_path": "/oRR9EXVoKP9szDkVKlze5HVJS7g.png", - "name": "Amazon Studios", - "origin_country": "US" - }, - { - "id": 151645, - "logo_path": null, - "name": "Skybound North", - "origin_country": "CA" - }, - { - "id": 50032, - "logo_path": "/ojrMksdtR7Bs2vwERU1LCrjv7vx.png", - "name": "Skybound Entertainment", - "origin_country": "US" - }, - { - "id": 215052, - "logo_path": null, - "name": "Skybound Animation", - "origin_country": "" - } - ], - "production_countries": [ - { - "iso_3166_1": "CA", - "name": "Canada" - }, - { - "iso_3166_1": "US", - "name": "United States of America" - } - ], - "seasons": [ - { - "air_date": "2023-07-21", - "episode_count": 1, - "id": 349664, - "name": "Specials", - "overview": "", - "poster_path": "/rJcVipFPY6JdFaDPan10f0OhbpM.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2021-03-25", - "episode_count": 8, - "id": 136020, - "name": "Season 1", - "overview": "Nolan Grayson (Omni-Man) is unquestionably the strongest being on our planet; he is also our most spirited protector, having saved the planet from untold calamity. His son Mark, wants nothing more than to follow in his footsteps. But there's something sinister afoot and Omni-man may not be what he appears. Which may prove even too much for the Guardians of the Globe.", - "poster_path": "/yDWJYRAwMNKbIYT8ZB33qy84uzO.jpg", - "season_number": 1, - "vote_average": 8.1 - }, - { - "air_date": "2023-11-02", - "episode_count": 8, - "id": 325266, - "name": "Season 2", - "overview": "In Season 2, still reeling from Nolan's betrayal, Mark struggles to rebuild his life as he faces a host of new threats, all while battling his greatest fear - that he might become his father without even knowing it.", - "poster_path": "/lxVS24ZhG3WQf3IMbkFIg6olT6A.jpg", - "season_number": 2, - "vote_average": 8.3 - } - ], - "spoken_languages": [ - { - "english_name": "English", - "iso_639_1": "en", - "name": "English" - } - ], - "status": "Returning Series", - "tagline": "Almost there.", - "type": "Scripted", - "vote_average": 8.65, - "vote_count": 4353 - }, - { - "adult": false, - "backdrop_path": "/3ILMlmC30QUnYkY3XEBOyJ82Dqu.jpg", - "created_by": [], - "episode_run_time": [ - 24 - ], - "first_air_date": "2016-04-03", - "genres": [ - { - "id": 10759, - "name": "Action & Adventure" - }, - { - "id": 16, - "name": "Animation" - }, - { - "id": 10765, - "name": "Sci-Fi & Fantasy" - } - ], - "homepage": "http://www.heroaca.com/", - "id": 65930, - "in_production": true, - "languages": [ - "ja" - ], - "last_air_date": "2024-07-13", - "last_episode_to_air": { - "id": 5244969, - "name": "Light Fades to Rain", - "overview": "Bakugo's Howitzer Impact didn't work against Shigaraki/All For One, either, and Bakugo is pushed into a corner by Shigaraki's power and words. In order to get him out of that predicament, U.A.'s Big Three take a stand!", - "vote_average": 0, - "vote_count": 0, - "air_date": "2024-07-20", - "episode_number": 11, - "episode_type": "standard", - "production_code": "149", - "runtime": 24, - "season_number": 7, - "show_id": 65930, - "still_path": "/e156Rz4wVpC2YFYDgGDg9hpVJzm.jpg" - }, - "name": "My Hero Academia", - "next_episode_to_air": { - "id": 5244971, - "name": "Those Who Defend, Those Who Violate", - "overview": "", - "vote_average": 0, - "vote_count": 0, - "air_date": "2024-08-03", - "episode_number": 12, - "episode_type": "standard", - "production_code": "150", - "runtime": 24, - "season_number": 7, - "show_id": 65930, - "still_path": null - }, - "networks": [ - { - "id": 57, - "logo_path": "/uxaXSoT8K0S2NE5PWsBpHUl3GGU.png", - "name": "Nippon TV", - "origin_country": "JP" - }, - { - "id": 94, - "logo_path": "/7RNXnyiMbjgqtPAjja13wchcrGI.png", - "name": "MBS", - "origin_country": "JP" - }, - { - "id": 160, - "logo_path": "/lUACMATs6jcscXIrzNCQzbvNVN5.png", - "name": "TBS", - "origin_country": "JP" - }, - { - "id": 201, - "logo_path": "/qNooLje0YQh1y3y9LUM2Y5QCtiF.png", - "name": "CBC", - "origin_country": "JP" - }, - { - "id": 569, - "logo_path": "/cIMyE9cw1W4kMFGxmC17HKTnVz9.png", - "name": "YTV", - "origin_country": "JP" - }, - { - "id": 896, - "logo_path": "/qfUzYnpnN5bnd2bqGUH0OlAMell.png", - "name": "Tulip Television", - "origin_country": "JP" - }, - { - "id": 1559, - "logo_path": "/artkCykJgOAh6lAjfrNNgANasgk.png", - "name": "SBC", - "origin_country": "JP" - }, - { - "id": 1896, - "logo_path": "/suqJy99xiGr8PV7eQovUFRgquYT.png", - "name": "FBS", - "origin_country": "JP" - }, - { - "id": 2460, - "logo_path": "/34sNEcsgcTAuDidRMrgxdfNyVjL.png", - "name": "BSN", - "origin_country": "JP" - }, - { - "id": 2461, - "logo_path": "/b4Ivxqz6UY0EogjYc09Y22ctC6F.png", - "name": "tys", - "origin_country": "JP" - }, - { - "id": 2462, - "logo_path": "/7zXfwh5ZhFqvdOWgWX80weU6Sqb.png", - "name": "NBC", - "origin_country": "JP" - }, - { - "id": 2727, - "logo_path": "/85U2onICiQV9fMHORxw8EWSQ6MZ.png", - "name": "Chukyo TV", - "origin_country": "JP" - }, - { - "id": 2728, - "logo_path": "/kwC7bfbGknKuL7uxKahk6paamlp.png", - "name": "RNB", - "origin_country": "JP" - }, - { - "id": 3201, - "logo_path": "/4OpeDJ8jzPeaSiOlzGCnHjm6tpt.png", - "name": "HTV", - "origin_country": "JP" - }, - { - "id": 3644, - "logo_path": "/8Cue5NzJ6cucpA5k73GVrCqn2JI.png", - "name": "FCT", - "origin_country": "JP" - }, - { - "id": 3658, - "logo_path": "/sJwRsE1lfMwAwYZi1OtRfn7V03t.png", - "name": "HBC", - "origin_country": "JP" - }, - { - "id": 3698, - "logo_path": "/rrw1HbmPpR9GQ3K19taPCYYf5jY.png", - "name": "STV", - "origin_country": "JP" - }, - { - "id": 3705, - "logo_path": "/zOgixhlAa61yUb32bsXvRtD63wI.png", - "name": "RKK", - "origin_country": "JP" - }, - { - "id": 3741, - "logo_path": "/hiI8H4WLDlCtRZQboq4BTdM2KAg.png", - "name": "KNB", - "origin_country": "JP" - }, - { - "id": 3969, - "logo_path": "/nhCsLIGjzIIp6jIFCdHN0cQEzjP.png", - "name": "i-Television", - "origin_country": "JP" - }, - { - "id": 3970, - "logo_path": "/9coKtCf4jSNCdSqGveVFyzvjrZt.png", - "name": "SBS", - "origin_country": "JP" - }, - { - "id": 3971, - "logo_path": "/6bhZ2SWdYTbSTQf8Bhmf1q0aBef.png", - "name": "IBC", - "origin_country": "JP" - }, - { - "id": 3972, - "logo_path": "/rL2IlndcEiQnIbym5EoSEM7rGlx.png", - "name": "BSS", - "origin_country": "JP" - }, - { - "id": 3973, - "logo_path": "/dh4E8hGvqD9Xqu51kbqUU06UKbt.png", - "name": "MRO", - "origin_country": "JP" - }, - { - "id": 3974, - "logo_path": "/yMQxsmGs88q54bslmcSeXlmpObC.png", - "name": "OBS", - "origin_country": "JP" - }, - { - "id": 3975, - "logo_path": "/6ACZlk44MWsIIwYHxjRGXGKlpRb.png", - "name": "TUF", - "origin_country": "JP" - }, - { - "id": 3977, - "logo_path": "/sGMMrdCmptaLLwJX7CsXTDaduLO.png", - "name": "RSK", - "origin_country": "JP" - }, - { - "id": 3978, - "logo_path": "/zOz9LK6WWLUWGuG0fthzDzCIXlA.png", - "name": "TUY", - "origin_country": "JP" - }, - { - "id": 3979, - "logo_path": "/yWlWHPUn6FHjNUulL1vp8croYFw.png", - "name": "tbc", - "origin_country": "JP" - }, - { - "id": 4748, - "logo_path": "/o5Hlt7ZXJPEm4Qrx2Pl2rtc9A5y.png", - "name": "RKB", - "origin_country": "JP" - }, - { - "id": 4790, - "logo_path": "/5aEqvKUgffp6zehXyCUhJyzeZPg.png", - "name": "YBS", - "origin_country": "JP" - }, - { - "id": 4791, - "logo_path": "/e9WRfzkc8HNsZ1qEF26ENHlBMvn.png", - "name": "KTK", - "origin_country": "JP" - }, - { - "id": 4792, - "logo_path": "/8kzeHaKeW3gZubs3cqlGWFvfJI7.png", - "name": "KUTVC", - "origin_country": "JP" - }, - { - "id": 4797, - "logo_path": "/ggNJJiuB0mT4cQckN9h6jxT7exe.png", - "name": "NKT", - "origin_country": "JP" - }, - { - "id": 4815, - "logo_path": "/igW7DjfUZ8Ew7BLzCxKHKpeFFL3.png", - "name": "RAB", - "origin_country": "JP" - }, - { - "id": 4816, - "logo_path": "/9qQIAEYEw1ZyPPK3tqE18Z00AwW.png", - "name": "TVI", - "origin_country": "JP" - }, - { - "id": 4817, - "logo_path": "/oxuY8YFFO6Iv1IicYRGFcLizERc.png", - "name": "MMT", - "origin_country": "JP" - }, - { - "id": 4818, - "logo_path": "/rddkLH5IZoh5IW5b6FHgrOBjBgE.png", - "name": "ABS", - "origin_country": "JP" - }, - { - "id": 4822, - "logo_path": "/xX0I9Sc0AxSoKoVtwwmz0DWOWcr.png", - "name": "JRT", - "origin_country": "JP" - }, - { - "id": 4825, - "logo_path": "/9dD3buakf1nS6XQVBwEtm50izs4.png", - "name": "TOS", - "origin_country": "JP" - }, - { - "id": 4859, - "logo_path": "/6jr76BpIItwLV5oKbZmRJsVh3c6.png", - "name": "RBC", - "origin_country": "JP" - }, - { - "id": 6155, - "logo_path": "/cvePJ33fR2SeirKZWD8rCV7rAaF.png", - "name": "YBC", - "origin_country": "JP" - }, - { - "id": 6171, - "logo_path": "/ekXN1cfYutjLfudy1MKyGzNynEa.png", - "name": "UTY", - "origin_country": "JP" - }, - { - "id": 6172, - "logo_path": "/mKslL0MTHHt9ukugWOv3Vh8Tn0E.png", - "name": "RCC", - "origin_country": "JP" - }, - { - "id": 6173, - "logo_path": "/YfewT1YYtAqkgvdu8oCX4mnJCs.png", - "name": "MRT", - "origin_country": "JP" - }, - { - "id": 6174, - "logo_path": "/aawphEBuBGT9RVP6xG3BZV8NOCw.png", - "name": "ATV", - "origin_country": "JP" - }, - { - "id": 6175, - "logo_path": "/iaaU6q82URj2mBbjQIbfAMUz14J.png", - "name": "MBC", - "origin_country": "JP" - }, - { - "id": 6286, - "logo_path": "/mcA2WrzDxg1MuZ2TnewjVZaTvM2.png", - "name": "TSB", - "origin_country": "JP" - }, - { - "id": 6668, - "logo_path": "/atlFO76SPaLGIt9Wmxzg23M0IoA.png", - "name": "TeNY", - "origin_country": "JP" - }, - { - "id": 6669, - "logo_path": "/w9VRiRNT3OrP09OHXl6i1nGFWiL.png", - "name": "RNC", - "origin_country": "JP" - }, - { - "id": 6670, - "logo_path": "/7OAJi6aS9zQWwP64jqxRllBvYKR.png", - "name": "NIB", - "origin_country": "JP" - }, - { - "id": 6671, - "logo_path": "/jd0KEJ6Md6JBRWjxTHRU9BYpbuv.png", - "name": "KKT", - "origin_country": "JP" - }, - { - "id": 7076, - "logo_path": "/tFePbc4dqJzcUaHeKAQkhRgT5zJ.png", - "name": "Daiichi-TV", - "origin_country": "JP" - }, - { - "id": 7077, - "logo_path": "/r1vdmMUpIGnGvLE3UMqkuEtWlG4.png", - "name": "FBC", - "origin_country": "JP" - }, - { - "id": 7078, - "logo_path": "/7QYtCUc3PxYvOQ0NDOw3vQHAIJh.png", - "name": "RKC", - "origin_country": "JP" - }, - { - "id": 7079, - "logo_path": "/wqeYNfsn0LSwbmQGPkcqMg5yhpW.png", - "name": "KYT", - "origin_country": "JP" - }, - { - "id": 7092, - "logo_path": "/5IzL2Fq2yErfy4LH96KX5PKOAbv.png", - "name": "KRY", - "origin_country": "JP" - } - ], - "number_of_episodes": 159, - "number_of_seasons": 7, - "origin_country": [ - "JP" - ], - "original_language": "ja", - "original_name": "僕のヒーローアカデミア", - "overview": "A superhero-admiring boy without any powers enrolls in a prestigious hero academy and learns what it really means to be a hero.", - "popularity": 145.361, - "poster_path": "/phuYuzqWW9ru8EA3HVjE9W2Rr3M.jpg", - "production_companies": [ - { - "id": 2849, - "logo_path": "/cN3JNIKawjOMtfk0GBVIbsx69bg.png", - "name": "BONES", - "origin_country": "JP" - }, - { - "id": 2918, - "logo_path": "/gyEWUBWwqrm3H5T2hkERD9LxpOq.png", - "name": "Shueisha", - "origin_country": "JP" - }, - { - "id": 3466, - "logo_path": "/lmCg0zarmM52wrmsZRUY0QlPKLh.png", - "name": "movic", - "origin_country": "JP" - }, - { - "id": 1778, - "logo_path": "/b5rT6VbYza3LyfltCmz1OcqzWJM.png", - "name": "dentsu", - "origin_country": "JP" - }, - { - "id": 11727, - "logo_path": "/cIMyE9cw1W4kMFGxmC17HKTnVz9.png", - "name": "Yomiuri Telecasting Corporation", - "origin_country": "JP" - }, - { - "id": 648, - "logo_path": "/s811As3dkcqSgl4nEWEVYfJVVxh.png", - "name": "Sony Music Entertainment", - "origin_country": "JP" - }, - { - "id": 882, - "logo_path": "/fRSWWjquvzcHjACbtF53utZFIll.png", - "name": "TOHO", - "origin_country": "JP" - } - ], - "production_countries": [ - { - "iso_3166_1": "JP", - "name": "Japan" - } - ], - "seasons": [ - { - "air_date": "2017-04-04", - "episode_count": 12, - "id": 88919, - "name": "Specials", - "overview": "", - "poster_path": "/jEoUOaOzdf00lsTV7EW2ARcB9Pb.jpg", - "season_number": 0, - "vote_average": 0 - }, - { - "air_date": "2016-04-03", - "episode_count": 13, - "id": 75441, - "name": "Season 1", - "overview": "", - "poster_path": "/6TKenGHaTGMvlMMKfMBoFHU2mVj.jpg", - "season_number": 1, - "vote_average": 7.4 - }, - { - "air_date": "2017-04-01", - "episode_count": 25, - "id": 86525, - "name": "Season 2", - "overview": "", - "poster_path": "/bLggKZhdEHhvax9jeT95MDxM6CA.jpg", - "season_number": 2, - "vote_average": 7.3 - }, - { - "air_date": "2018-04-07", - "episode_count": 25, - "id": 100397, - "name": "Season 3", - "overview": "", - "poster_path": "/1VVJgXpSDI2uMHnlzI9Eg0zF7pw.jpg", - "season_number": 3, - "vote_average": 6.4 - }, - { - "air_date": "2019-10-12", - "episode_count": 25, - "id": 125861, - "name": "Season 4", - "overview": "", - "poster_path": "/YCI5ADVr0JBboX0V3C3apAOtNH.jpg", - "season_number": 4, - "vote_average": 6.6 - }, - { - "air_date": "2021-03-27", - "episode_count": 25, - "id": 149686, - "name": "Season 5", - "overview": "", - "poster_path": "/uJz848GKjbSqjCkkF1J99HN9VaG.jpg", - "season_number": 5, - "vote_average": 6.6 - }, - { - "air_date": "2022-10-01", - "episode_count": 25, - "id": 236472, - "name": "Season 6", - "overview": "", - "poster_path": "/wSrSvGVxlYaTylTulqueeNQJyvR.jpg", - "season_number": 6, - "vote_average": 8.3 - }, - { - "air_date": "2024-05-04", - "episode_count": 21, - "id": 356358, - "name": "Season 7", - "overview": "", - "poster_path": "/zgq6eyLuGkTIVSCD0dL8TqZEuqF.jpg", - "season_number": 7, - "vote_average": 4.6 - } - ], - "spoken_languages": [ - { - "english_name": "Japanese", - "iso_639_1": "ja", - "name": "日本語" - } - ], - "status": "Returning Series", - "tagline": "", - "type": "Scripted", - "vote_average": 8.648, - "vote_count": 4795 - } -] \ No newline at end of file diff --git a/ts/vercel.json b/ts/vercel.json deleted file mode 100644 index 58a9103..0000000 --- a/ts/vercel.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": 2, - "builds": [ - { - "src": "index.js", - "use": "@vercel/node", - "config": { "includeFiles": ["dist/**"] } - } - ], - "routes": [ - { - "src": "/(.*)", - "dest": "index.js" - } - ] -}