├── .env example ├── .eslintrc.cjs ├── .gitignore ├── .netlify ├── functions-internal │ └── __render.js └── package.json ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .svelte-kit ├── build │ ├── app.js │ ├── components │ │ ├── error.svelte │ │ └── layout.svelte │ ├── generated │ │ ├── manifest.js │ │ └── root.svelte │ ├── hooks.js │ └── runtime │ │ ├── app │ │ ├── env.js │ │ ├── navigation.js │ │ ├── paths.js │ │ └── stores.js │ │ ├── chunks │ │ └── utils.js │ │ ├── env.js │ │ ├── internal │ │ ├── singletons.js │ │ └── start.js │ │ └── paths.js ├── dev │ ├── components │ │ ├── error.svelte │ │ └── layout.svelte │ ├── generated │ │ ├── manifest.js │ │ └── root.svelte │ ├── kit.js │ └── runtime │ │ ├── app │ │ ├── env.js │ │ ├── navigation.js │ │ ├── paths.js │ │ └── stores.js │ │ ├── chunks │ │ └── utils.js │ │ ├── env.js │ │ ├── internal │ │ ├── singletons.js │ │ └── start.js │ │ └── paths.js ├── netlify │ └── entry.js └── output │ ├── client │ └── _app │ │ ├── assets │ │ ├── Cast-cd25fbf7.css │ │ ├── pages │ │ │ ├── __error.svelte-8a5069d9.css │ │ │ └── __layout.svelte-d7d8cb99.css │ │ └── start-464e9d0a.css │ │ ├── chunks │ │ ├── Cast-6bfa9e9c.js │ │ ├── MainSection-8e495d87.js │ │ ├── ProgressBar-f61e37f1.js │ │ ├── singletons-12a22614.js │ │ ├── store-07881416.js │ │ ├── stores-462c50b9.js │ │ └── vendor-fc6286ba.js │ │ ├── pages │ │ ├── NotFound.svelte-9659fd5f.js │ │ ├── __error.svelte-1cf9c0b1.js │ │ ├── __layout.svelte-f4eb42df.js │ │ ├── episode │ │ │ └── [id] │ │ │ │ └── [season_number] │ │ │ │ └── [episode_number].svelte-a1e7498f.js │ │ ├── genre │ │ │ └── [media] │ │ │ │ └── [id].svelte-5293c531.js │ │ ├── index.svelte-0b7a5c7b.js │ │ ├── movie │ │ │ └── [id].svelte-cb05cc7d.js │ │ ├── person │ │ │ └── [id].svelte-c20e0cad.js │ │ ├── search │ │ │ └── [id].svelte-63c2cd3f.js │ │ ├── seasons │ │ │ └── [id] │ │ │ │ └── [season_number].svelte-7534c8b0.js │ │ ├── trending │ │ │ └── [media].svelte-40e542c5.js │ │ └── tv │ │ │ └── [id].svelte-6c7edfff.js │ │ └── start-ae56e48a.js │ ├── manifest.json │ └── server │ ├── app.js │ └── chunks │ ├── Cast-31f4e4f3.js │ ├── MainSection-8f5559a2.js │ ├── NotFound-9fe683d6.js │ ├── ProgressBar-607c37c9.js │ ├── [episode_number]-47200495.js │ ├── [id]-6969a75f.js │ ├── [id]-8c40f23a.js │ ├── [id]-a8c2d94e.js │ ├── [id]-d1cca444.js │ ├── [id]-de8563ca.js │ ├── [media]-0dee69ba.js │ ├── [season_number]-873eb4f0.js │ ├── __error-7ac6427a.js │ ├── __layout-938abee5.js │ ├── apiCalls-537263b8.js │ ├── app-14a936dc.js │ ├── getCast-7cf0533a.js │ ├── getEpisode-3741fea8.js │ ├── getKnownFor-737a4ce8.js │ ├── getMovie-dfbada3a.js │ ├── getMovieGenres-3625ddfd.js │ ├── getMovieGenres-daf20458.js │ ├── getPerson-73622a35.js │ ├── getSearch-b70547a7.js │ ├── getSeason-d3cb4046.js │ ├── getShow-6a79cddc.js │ ├── getShow-f81111d3.js │ ├── getShowGenre-bece8541.js │ ├── getTrailer-b36b5a94.js │ ├── getTvGenres-8924ea77.js │ ├── getTvGenres-912a2a2a.js │ ├── getTvNetworks-3869faf2.js │ ├── index-6445fb8c.js │ ├── store-cc224516.js │ └── stores-bd543f9c.js ├── CNAME ├── README.md ├── netlify.toml ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── src ├── app.css ├── app.html ├── global.d.ts ├── lib │ ├── components │ │ ├── Cast.svelte │ │ ├── Genre.svelte │ │ ├── Header.svelte │ │ ├── MovieCard.svelte │ │ ├── PageTitle.svelte │ │ ├── PersonCard.svelte │ │ ├── SeasonTitle.svelte │ │ └── TvCard.svelte │ ├── pages │ │ ├── Episode.svelte │ │ ├── MainSection.svelte │ │ ├── MovieList.svelte │ │ ├── MovieMedia.svelte │ │ ├── Person.svelte │ │ ├── PersonList.svelte │ │ ├── Season.svelte │ │ ├── TvList.svelte │ │ └── TvMedia.svelte │ ├── stores │ │ ├── store.ts │ │ └── theme-store.ts │ └── utilities │ │ ├── InfiniteScroll.svelte │ │ ├── KnownFor.svelte │ │ ├── Modal.svelte │ │ ├── MorePages.svelte │ │ ├── PageTransition.svelte │ │ ├── Pagination.svelte │ │ ├── ProgressBar.svelte │ │ ├── Search.svelte │ │ ├── Seasons.svelte │ │ ├── Selector.svelte │ │ ├── Skeleton.svelte │ │ ├── Spinner.svelte │ │ ├── ToggleDarkMode.svelte │ │ └── tooltip.ts └── routes │ ├── NotFound.svelte │ ├── __error.svelte │ ├── __layout.svelte │ ├── api │ ├── getMovieGenres.ts │ ├── getTvGenres.ts │ ├── getTvNetworks.ts │ └── postData.ts │ ├── episode │ └── [id] │ │ └── [season_number] │ │ └── [episode_number].svelte │ ├── genre │ └── [media] │ │ └── [id].svelte │ ├── index.svelte │ ├── movie │ └── [id].svelte │ ├── person │ └── [id].svelte │ ├── search │ └── [id].svelte │ ├── seasons │ └── [id] │ │ └── [season_number].svelte │ ├── trending │ └── [media].svelte │ └── tv │ └── [id].svelte ├── static ├── default.jpg ├── favicon.ico ├── icons8-moon-60.png ├── icons8-sun-24.png ├── icons8-sun-48.png ├── icons8-sun.svg ├── person.svg ├── robots.txt └── sun_light_mode_day-512.webp ├── svelte.config.js ├── tailwind.config.cjs └── tsconfig.json /.env example: -------------------------------------------------------------------------------- 1 | VITE_API_KEY = 999XXX999............ -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: '@typescript-eslint/parser', 4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], 5 | plugins: ['svelte3', '@typescript-eslint'], 6 | ignorePatterns: ['*.cjs'], 7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 8 | settings: { 9 | 'svelte3/typescript': require('typescript') 10 | }, 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2018 14 | }, 15 | env: { 16 | browser: true, 17 | es2017: true, 18 | node: true 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /.svelte 4 | /build 5 | /functions 6 | .env 7 | 8 | -------------------------------------------------------------------------------- /.netlify/package.json: -------------------------------------------------------------------------------- 1 | {"type":"commonjs"} -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16.8.0 -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .svelte/** 2 | static/** 3 | build/** 4 | node_modules/** 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100 6 | } 7 | -------------------------------------------------------------------------------- /.svelte-kit/build/components/error.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | 18 |
{error.message}21 | 22 | 23 | 24 | {#if error.frame} 25 |
{error.frame}26 | {/if} 27 | {#if error.stack} 28 |
{error.stack}29 | {/if} 30 | -------------------------------------------------------------------------------- /.svelte-kit/build/components/layout.svelte: -------------------------------------------------------------------------------- 1 |
{error.message}21 | 22 | 23 | 24 | {#if error.frame} 25 |
{error.frame}26 | {/if} 27 | {#if error.stack} 28 |
{error.stack}29 | {/if} 30 | -------------------------------------------------------------------------------- /.svelte-kit/dev/components/layout.svelte: -------------------------------------------------------------------------------- 1 |
This route doesn't exist.
`; 5 | }); 6 | export { NotFound as default }; 7 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/ProgressBar-607c37c9.js: -------------------------------------------------------------------------------- 1 | import { c as create_ssr_component, a as add_attribute, b as escape } from "./app-14a936dc.js"; 2 | const ProgressBar = create_ssr_component(($$result, $$props, $$bindings, slots) => { 3 | let { progress } = $$props; 4 | let progress_percent; 5 | let canvas; 6 | if ($$props.progress === void 0 && $$bindings.progress && progress !== void 0) 7 | $$bindings.progress(progress); 8 | progress_percent = progress * 10; 9 | return `${escape(person.known_for_department)}
48 |Male
` : `Female
`} 50 |${escape(person.birthday)}
` : `Unknown
`} 52 |${escape(person.place_of_birth)}
` : `Unknown
`} 54 | ${person.also_known_as && person.also_known_as.length ? `${escape(alias)}
`)}` : ``}${escape(person.biography)}
Play Trailer
No Trailer Available
${escape(message)}
26 | 27 | ${error.stack ? ` 28 |${escape(error.stack)}` : ``}`; 31 | }); 32 | export { _error as default, load }; 33 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/apiCalls-537263b8.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getCast-7cf0533a.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/${request.body["media"]}/${request.body["id"]}/credits?api_key=${api}&language=en-US`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getEpisode-3741fea8.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/tv/${request.body["id"]}/season/${request.body["season_number"]}/episode/${request.body["episode_number"]}?api_key=${api}&language=en-US`; 5 | const res_api = await fetch(api_url); 6 | const res = await res_api.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getKnownFor-737a4ce8.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/person/${request.body["person"]}/combined_credits?api_key=${api}&language=en-US`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getMovie-dfbada3a.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/${request.body["media"]}/${request.body["id"]}?api_key=${api}&language=en-US`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getMovieGenres-3625ddfd.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const GENRES_MOVIE_API = `https://api.themoviedb.org/3/genre/movie/list?api_key=${api}&language-en-GB`; 3 | const get = async () => { 4 | try { 5 | const response = await fetch(GENRES_MOVIE_API); 6 | const response_json = await response.json(); 7 | const movie_genres = response_json.genres; 8 | return { 9 | body: JSON.stringify({ movie_genres }) 10 | }; 11 | } catch (e) { 12 | console.log("error", e); 13 | } 14 | }; 15 | export { get }; 16 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getMovieGenres-daf20458.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const GENRES_MOVIE_API = `https://api.themoviedb.org/3/genre/movie/list?api_key=${api}&language-en-GB`; 3 | const get = async () => { 4 | try { 5 | const response = await fetch(GENRES_MOVIE_API); 6 | const response_json = await response.json(); 7 | const movie_genres = response_json.genres; 8 | return { 9 | body: JSON.stringify({ movie_genres }) 10 | }; 11 | } catch (e) { 12 | console.log("error", e); 13 | } 14 | }; 15 | export { get }; 16 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getPerson-73622a35.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/${request.body["media"]}/${request.body["id"]}/credits?api_key=${api}&language=en-US`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getSearch-b70547a7.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/search/${request.body["media"]}?api_key=${api}&language=en-US&page=${request.body["page"]}&include_adult=false&query=${request.body["query"]}`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getSeason-d3cb4046.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/tv/${request.body["id"]}/season/${request.body["season_number"]}?api_key=${api}&language=en-US`; 5 | const res_api = await fetch(api_url); 6 | const res = await res_api.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getShow-6a79cddc.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/trending/${request.body["media"]}/week?api_key=${api}&language=en-GB&page=${request.body["page"]}`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getShow-f81111d3.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/trending/${request.body["media"]}/week?api_key=${api}&language=en-GB&page=${request.body["page"]}`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getShowGenre-bece8541.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/discover/${request.body["media"]}?api_key=${api}&with_genres=${request.body["genre"]}&page=${request.body["page"]}`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getTrailer-b36b5a94.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const post = async (request) => { 3 | try { 4 | const api_url = `https://api.themoviedb.org/3/${request.body["media"]}/${request.body["id"]}/videos?api_key=${api}&language=en-US`; 5 | const res_mov = await fetch(api_url); 6 | const res = await res_mov.json(); 7 | return { 8 | body: JSON.stringify({ res }) 9 | }; 10 | } catch (e) { 11 | console.log("error", e); 12 | } 13 | }; 14 | export { post }; 15 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getTvGenres-8924ea77.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const GENRES_TV_API = `https://api.themoviedb.org/3/genre/tv/list?api_key=${api}&language-en-GB`; 3 | const get = async () => { 4 | try { 5 | const response = await fetch(GENRES_TV_API); 6 | const response_json = await response.json(); 7 | const tv_genres = response_json.genres; 8 | return { 9 | body: JSON.stringify({ tv_genres }) 10 | }; 11 | } catch (e) { 12 | console.log("error", e); 13 | } 14 | }; 15 | export { get }; 16 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getTvGenres-912a2a2a.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const GENRES_TV_API = `https://api.themoviedb.org/3/genre/tv/list?api_key=${api}&language-en-GB`; 3 | const get = async () => { 4 | try { 5 | const response = await fetch(GENRES_TV_API); 6 | const response_json = await response.json(); 7 | const tv_genres = response_json.genres; 8 | return { 9 | body: JSON.stringify({ tv_genres }) 10 | }; 11 | } catch (e) { 12 | console.log("error", e); 13 | } 14 | }; 15 | export { get }; 16 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/getTvNetworks-3869faf2.js: -------------------------------------------------------------------------------- 1 | const api = "61e588d14c9ac42a437e560cc3d65659"; 2 | const TV_NETWORKS_API = `https://api.themoviedb.org/3/watch/providers/tv?api_key=${api}&language=en-US`; 3 | const get = async () => { 4 | try { 5 | const response = await fetch(TV_NETWORKS_API); 6 | const response_json = await response.json(); 7 | const tv_network = response_json.results; 8 | return { 9 | body: JSON.stringify({ tv_network }) 10 | }; 11 | } catch (e) { 12 | console.log("error", e); 13 | } 14 | }; 15 | export { get }; 16 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/index-6445fb8c.js: -------------------------------------------------------------------------------- 1 | import { c as create_ssr_component, s as subscribe, f as set_store_value, v as validate_component } from "./app-14a936dc.js"; 2 | import { d as data, s as selected } from "./store-cc224516.js"; 3 | import { M as MainSection } from "./MainSection-8f5559a2.js"; 4 | import "./ProgressBar-607c37c9.js"; 5 | async function load({ fetch }) { 6 | data.set(void 0); 7 | const res = await fetch("./api/getShow", { 8 | headers: { "Content-Type": "application/json" }, 9 | method: "POST", 10 | body: JSON.stringify({ media: "movie", page: "1" }) 11 | }); 12 | const datas = await res.json(); 13 | data.set(await datas.res.results); 14 | const total_pages = await datas.res.total_pages; 15 | return { props: { total_pages } }; 16 | } 17 | const Routes = create_ssr_component(($$result, $$props, $$bindings, slots) => { 18 | let $selected, $$unsubscribe_selected; 19 | $$unsubscribe_selected = subscribe(selected, (value) => $selected = value); 20 | let { total_pages } = $$props; 21 | set_store_value(selected, $selected = null, $selected); 22 | if ($$props.total_pages === void 0 && $$bindings.total_pages && total_pages !== void 0) 23 | $$bindings.total_pages(total_pages); 24 | $$unsubscribe_selected(); 25 | return `${validate_component(MainSection, "MainSection").$$render($$result, { total_pages }, {}, {})}`; 26 | }); 27 | export { Routes as default, load }; 28 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/store-cc224516.js: -------------------------------------------------------------------------------- 1 | import { n as noop, d as safe_not_equal } from "./app-14a936dc.js"; 2 | const subscriber_queue = []; 3 | function writable(value, start = noop) { 4 | let stop; 5 | const subscribers = new Set(); 6 | function set(new_value) { 7 | if (safe_not_equal(value, new_value)) { 8 | value = new_value; 9 | if (stop) { 10 | const run_queue = !subscriber_queue.length; 11 | for (const subscriber of subscribers) { 12 | subscriber[1](); 13 | subscriber_queue.push(subscriber, value); 14 | } 15 | if (run_queue) { 16 | for (let i = 0; i < subscriber_queue.length; i += 2) { 17 | subscriber_queue[i][0](subscriber_queue[i + 1]); 18 | } 19 | subscriber_queue.length = 0; 20 | } 21 | } 22 | } 23 | } 24 | function update(fn) { 25 | set(fn(value)); 26 | } 27 | function subscribe(run, invalidate = noop) { 28 | const subscriber = [run, invalidate]; 29 | subscribers.add(subscriber); 30 | if (subscribers.size === 1) { 31 | stop = start(set) || noop; 32 | } 33 | run(value); 34 | return () => { 35 | subscribers.delete(subscriber); 36 | if (subscribers.size === 0) { 37 | stop(); 38 | stop = null; 39 | } 40 | }; 41 | } 42 | return { set, update, subscribe }; 43 | } 44 | const current_page = writable(1); 45 | const media_type = writable("movie"); 46 | const selected = writable(null); 47 | const show_name = writable(""); 48 | const season_count = writable(0); 49 | const show_id = writable(0); 50 | const data = writable([]); 51 | const tv_genres = writable([]); 52 | const movie_genres = writable([]); 53 | export { media_type as a, show_name as b, current_page as c, data as d, show_id as e, season_count as f, movie_genres as m, selected as s, tv_genres as t, writable as w }; 54 | -------------------------------------------------------------------------------- /.svelte-kit/output/server/chunks/stores-bd543f9c.js: -------------------------------------------------------------------------------- 1 | import { i as getContext } from "./app-14a936dc.js"; 2 | const getStores = () => { 3 | const stores = getContext("__svelte__"); 4 | return { 5 | page: { 6 | subscribe: stores.page.subscribe 7 | }, 8 | navigating: { 9 | subscribe: stores.navigating.subscribe 10 | }, 11 | get preloading() { 12 | console.error("stores.preloading is deprecated; use stores.navigating instead"); 13 | return { 14 | subscribe: stores.navigating.subscribe 15 | }; 16 | }, 17 | session: stores.session 18 | }; 19 | }; 20 | const page = { 21 | subscribe(fn) { 22 | const store = getStores().page; 23 | return store.subscribe(fn); 24 | } 25 | }; 26 | export { page as p }; 27 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | tmdb.athena-designs.com -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## SvelteKit Movies 2 | 3 | Note: Majority credit for this implementation goes to [WayneMorganUK](https://github.com/WayneMorganUK/sveltekit-movie-app). 4 | 5 | ## please note this app will not work unles you provide your own TMDB api key 6 | 7 | ## adding environment variables 8 | 9 | in dev mode create a .env file similar to the example. 10 | You will need your own [TMDB api key ](https://www.themoviedb.org/faq/api) 11 | 12 | 13 | ## create-svelte 14 | 15 | Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); 16 | 17 | ## Creating a project 18 | 19 | If you're seeing this, you've probably already done this step. Congrats! 20 | 21 | ```bash 22 | # create a new project in the current directory 23 | npm init svelte@next 24 | 25 | # create a new project in my-app 26 | npm init svelte@next my-app 27 | ``` 28 | 29 | > Note: the `@next` is temporary 30 | 31 | ## Developing 32 | 33 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 34 | 35 | ```bash 36 | npm run dev 37 | 38 | # or start the server and open the app in a new browser tab 39 | npm run dev -- --open 40 | ``` 41 | 42 | ## Building 43 | 44 | Svelte apps are built with _adapters_, which optimise your project for deployment to different environments. 45 | 46 | By default, `npm run build` will generate a Node app that you can run with `node build`. To use a different adapter, add it to the `devDependencies` in `package.json` making sure to specify the version as `next` and update your `svelte.config.cjs` to [specify your chosen adapter](https://kit.svelte.dev/docs#configuration-adapter). The following official adapters are available: 47 | 48 | - [@sveltejs/adapter-node](https://github.com/sveltejs/kit/tree/master/packages/adapter-node) 49 | - [@sveltejs/adapter-static](https://github.com/sveltejs/kit/tree/master/packages/adapter-static) 50 | - [@sveltejs/adapter-netlify](https://github.com/sveltejs/kit/tree/master/packages/adapter-netlify) 51 | - [@sveltejs/adapter-vercel](https://github.com/sveltejs/kit/tree/master/packages/adapter-vercel) 52 | - ...more soon 53 | 54 | [See the adapter documentation for more detail](https://kit.svelte.dev/docs#adapters) 55 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "npm run build" 3 | publish = "build/" 4 | 5 | [dev] 6 | command = "svelte-kit dev" 7 | framework = "svelte-kit" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sveltekit-movie-app", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "svelte-kit dev", 6 | "build": "svelte-kit build", 7 | "package": "svelte-kit package", 8 | "preview": "svelte-kit preview", 9 | "check": "svelte-check --tsconfig ./tsconfig.json", 10 | "rimraf": "./node_modules/rimraf/bin.js", 11 | "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", 12 | "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", 13 | "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." 14 | }, 15 | "devDependencies": { 16 | "@sveltejs/adapter-netlify": "^1.0.0-next.38", 17 | "@sveltejs/adapter-node": "^1.0.0-next.61", 18 | "@sveltejs/adapter-static": "^1.0.0-next.26", 19 | "@sveltejs/kit": "^1.0.0-next.229", 20 | "@tailwindcss/line-clamp": "^0.3.0", 21 | "@types/node": "^17.0.8", 22 | "@typescript-eslint/eslint-plugin": "^5.8.0", 23 | "@typescript-eslint/parser": "^5.8.0", 24 | "autoprefixer": "^10.4.0", 25 | "cssnano": "^5.0.14", 26 | "eslint": "^8.5.0", 27 | "eslint-config-prettier": "^8.3.0", 28 | "eslint-plugin-svelte3": "^3.2.1", 29 | "node-fetch": "^3.1.0", 30 | "postcss": "^8.4.5", 31 | "postcss-load-config": "^3.1.0", 32 | "prettier": "~2.5.1", 33 | "prettier-plugin-svelte": "^2.5.1", 34 | "stream": "^0.0.2", 35 | "svelte": "^3.42.6", 36 | "svelte-preprocess": "^4.9.4", 37 | "tailwindcss": "^3.0.7", 38 | "tslib": "^2.3.1", 39 | "typescript": "^4.5.4", 40 | "vite": "^2.7.7" 41 | }, 42 | "type": "module", 43 | "engines": { 44 | "node": ">= 12.17.0" 45 | }, 46 | "dependencies": { 47 | "sapper-environment": "^1.0.1" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const tailwindcss = require('tailwindcss'); 2 | const autoprefixer = require('autoprefixer'); 3 | const cssnano = require('cssnano'); 4 | 5 | const mode = process.env.NODE_ENV; 6 | const dev = mode === 'development'; 7 | 8 | const config = { 9 | plugins: [ 10 | //Some plugins, like postcss-nested, need to run before Tailwind, 11 | tailwindcss(), 12 | //But others, like autoprefixer, need to run after, 13 | autoprefixer(), 14 | !dev && 15 | cssnano({ 16 | preset: 'default' 17 | }) 18 | ] 19 | }; 20 | 21 | module.exports = config; 22 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | .light { 7 | --color-text-base: #eae2e2; 8 | --color-text-muted: #ffcf91; 9 | --color-text-inverted: #ffffff; 10 | --color-text-muted-inverted: #d7d7d7; 11 | --color-text-selected: #f19f36; 12 | --color-bg: #938e94; 13 | --color-primary: #5d5c61; 14 | --color-secondary: #7395ae; 15 | --color-tertiary: #557a95; 16 | --color-border: #b0a295; 17 | } 18 | 19 | .dark { 20 | --color-text-base: #09d3ac; 21 | --color-text-muted: #ffffff; 22 | --color-text-inverted: #ececec; 23 | --color-text-muted-inverted: #616161; 24 | --color-text-selected: #ff206e; 25 | --color-bg: #000000; 26 | --color-primary: #424242; 27 | --color-secondary: #393737; 28 | --color-tertiary: #1c1c1c; 29 | --color-border: #303030; 30 | } 31 | 32 | @font-face { 33 | font-family: 'Raleway'; 34 | font-weight: 400; 35 | font-style: normal; 36 | unicode-range: U+000-5FF; 37 | src: local('Raleway'); 38 | font-display: swap; 39 | } 40 | 41 | h1 { 42 | @apply text-4xl; 43 | } 44 | h2 { 45 | @apply text-3xl; 46 | } 47 | h3 { 48 | @apply text-2xl; 49 | } 50 | h4 { 51 | @apply text-xl; 52 | } 53 | h5 { 54 | @apply text-lg; 55 | } 56 | h6 { 57 | @apply text-base; 58 | } 59 | p { 60 | @apply text-xs; 61 | } 62 | h1, 63 | h2, 64 | h3, 65 | h4, 66 | h5, 67 | h6 { 68 | @apply font-semibold; 69 | } 70 | body { 71 | @apply mx-auto; 72 | @apply bg-skin-bg; 73 | } 74 | } 75 | 76 | html { 77 | overflow-y: scroll; 78 | } 79 | 80 | .root { 81 | display: flex; 82 | flex-direction: column; 83 | } 84 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %svelte.head% 8 | 9 | 10 |
No Trailer Available
107 |{person.known_for_department}
31 |Male
34 | {:else} 35 |Female
36 | {/if} 37 |{person.birthday}
40 | {:else} 41 |Unknown
42 | {/if} 43 |{person.place_of_birth}
46 | {:else} 47 |Unknown
48 | {/if} 49 | {#if person.also_known_as && person.also_known_as.length} 50 |{alias}
53 | {/each} 54 | {/if} 55 |{person.biography}
65 |No Trailer Available
110 |This route doesn't exist.
3 | -------------------------------------------------------------------------------- /src/routes/__error.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 20 | 21 |{message}
28 | 29 | {#if error.stack} 30 | 31 |{error.stack}34 | {/if} 35 | 36 | 55 | -------------------------------------------------------------------------------- /src/routes/__layout.svelte: -------------------------------------------------------------------------------- 1 | 18 | 19 | 25 | 26 |