From a6fa50f1b853ae6b91de2f2c99ac413e399cb391 Mon Sep 17 00:00:00 2001 From: Hugo Korte <63101006+Hugos68@users.noreply.github.com> Date: Fri, 13 Oct 2023 19:07:33 +0200 Subject: [PATCH] Resolve Typescript Issues 2/2 (#2125) Co-authored-by: CokaKoala <31664583+AdrianGonz97@users.noreply.github.com> --- sites/skeleton.dev/.eslintrc.cjs | 9 +- .../elements/scroll-containers/+page.svelte | 2 +- .../(inner)/elements/typography/+page.svelte | 2 +- sites/skeleton.dev/src/routes/+layout.svelte | 4 +- .../src/routes/blog/[slug]/+page.svelte | 5 +- .../src/routes/blog/blog-service.ts | 109 ++++++++++++++++-- 6 files changed, 117 insertions(+), 14 deletions(-) diff --git a/sites/skeleton.dev/.eslintrc.cjs b/sites/skeleton.dev/.eslintrc.cjs index e34d16e1..c39f82af 100644 --- a/sites/skeleton.dev/.eslintrc.cjs +++ b/sites/skeleton.dev/.eslintrc.cjs @@ -26,6 +26,13 @@ module.exports = { }, rules: { 'no-useless-escape': 'off', - 'svelte/no-at-html-tags': 'off' + 'svelte/no-at-html-tags': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^\\$\\$(Props|Events|Slots|Generic)$' + } + ] } }; diff --git a/sites/skeleton.dev/src/routes/(inner)/elements/scroll-containers/+page.svelte b/sites/skeleton.dev/src/routes/(inner)/elements/scroll-containers/+page.svelte index 591a4b80..a1dcbfcf 100644 --- a/sites/skeleton.dev/src/routes/(inner)/elements/scroll-containers/+page.svelte +++ b/sites/skeleton.dev/src/routes/(inner)/elements/scroll-containers/+page.svelte @@ -70,7 +70,7 @@
- {#each Array.from({ length: 8 }) as _, i} + {#each { length: 8 } as _, i}
{i + 1}
{/each}
diff --git a/sites/skeleton.dev/src/routes/(inner)/elements/typography/+page.svelte b/sites/skeleton.dev/src/routes/(inner)/elements/typography/+page.svelte index e1469de4..4ecc117f 100644 --- a/sites/skeleton.dev/src/routes/(inner)/elements/typography/+page.svelte +++ b/sites/skeleton.dev/src/routes/(inner)/elements/typography/+page.svelte @@ -3,7 +3,7 @@ import { DocsFeature, type DocsShellSettings } from '$lib/layouts/DocsShell/types'; import DocsPreview from '$lib/components/DocsPreview/DocsPreview.svelte'; // Components - import { CodeBlock, Accordion, AccordionItem } from '@skeletonlabs/skeleton'; + import { CodeBlock } from '@skeletonlabs/skeleton'; // Docs Shell const settings: DocsShellSettings = { diff --git a/sites/skeleton.dev/src/routes/+layout.svelte b/sites/skeleton.dev/src/routes/+layout.svelte index 1800b080..c7d17f44 100644 --- a/sites/skeleton.dev/src/routes/+layout.svelte +++ b/sites/skeleton.dev/src/routes/+layout.svelte @@ -122,9 +122,9 @@ } // Lifecycle - afterNavigate((params: any) => { + afterNavigate((params) => { // Scroll to top - const isNewPage: boolean = params.from && params.to && params.from.route.id !== params.to.route.id; + const isNewPage = params.from && params.to && params.from.route.id !== params.to.route.id; const elemPage = document.querySelector('#page'); if (isNewPage && elemPage !== null) { elemPage.scrollTop = 0; diff --git a/sites/skeleton.dev/src/routes/blog/[slug]/+page.svelte b/sites/skeleton.dev/src/routes/blog/[slug]/+page.svelte index cc41cba8..a23e8313 100644 --- a/sites/skeleton.dev/src/routes/blog/[slug]/+page.svelte +++ b/sites/skeleton.dev/src/routes/blog/[slug]/+page.svelte @@ -19,11 +19,12 @@ // Element Page elemPage = document.querySelector('#page'); // CodeBlock Highlight - document.querySelectorAll('pre code').forEach((elem: any) => { + document.querySelectorAll('pre code').forEach((elem) => { + if (!(elem instanceof HTMLElement)) return; hljs.highlightElement(elem); }); // Table - document.querySelectorAll('table').forEach((elem: any) => { + document.querySelectorAll('table').forEach((elem) => { elem.classList.add('table'); }); }); diff --git a/sites/skeleton.dev/src/routes/blog/blog-service.ts b/sites/skeleton.dev/src/routes/blog/blog-service.ts index 1edfbd63..e7f2b937 100644 --- a/sites/skeleton.dev/src/routes/blog/blog-service.ts +++ b/sites/skeleton.dev/src/routes/blog/blog-service.ts @@ -6,19 +6,18 @@ const baseUrl = 'https://skeleton.ghost.io/ghost/api/content'; const ghostKey = 'c76a270f160dbf241b27b81dc2'; const headers = { 'Accept-Version': 'v5.0' }; -export async function getBlogList(page = 1): Promise { +export async function getBlogList(page = 1) { const http = await fetch(`${baseUrl}/posts/?key=${ghostKey}&page=${page}&include=tags`, { headers }); - const res = await http.json(); - + const res = (await http.json()) as BlogList; if (http.ok) return res; - throw new Error(res); + throw new Error(http.statusText); } -export async function getBlogPost(slug: string): Promise { +export async function getBlogPost(slug: string) { const http = await fetch(`${baseUrl}/posts/slug/${slug}/?key=${ghostKey}&include=tags,authors`, { headers }); - const res = await http.json(); + const res = (await http.json()) as BlogList; if (http.ok) return res; - throw new Error(res); + throw new Error(http.statusText); } // Formatters --- @@ -28,3 +27,99 @@ export function blogDateFormatter(date: string): string { const d: Date = new Date(date); return d.toLocaleDateString('en-US', options); } + +// Types --- +type BlogList = { + meta: Meta; + posts: Post[]; + vercelEnv: string; +}; + +type Meta = { + pagination: { + page: number; + pages: number; + limit: number; + total: number; + next: number; + prev: number | null; + }; +}; + +type Post = { + id: string; + uuid: string; + title: string; + slug: string; + html: string; + comment_id: string; + feature_image: string; + featured: boolean; + visibility: string; + created_at: string; + updated_at: string; + published_at: string; + custom_excerpt: string; + codeinjection_head: string | null; + codeinjection_foot: string | null; + custom_template: string | null; + canonical_url: string | null; + tags: Tag[]; + primary_tag: Tag; + url: string; + excerpt: string; + reading_time: number; + access: boolean; + comments: boolean; + og_image: string | null; + og_title: string | null; + og_description: string | null; + twitter_image: string | null; + twitter_title: string | null; + twitter_description: string | null; + meta_title: string | null; + meta_description: string | null; + email_subject: string | null; + frontmatter: string | null; + feature_image_alt: string | null; + feature_image_caption: string | null; + primary_author: Author; +}; + +type Tag = { + id: string; + name: string; + slug: string; + description: string; + feature_image: string | null; + visibility: string; + og_image: string | null; + og_title: string | null; + og_description: string | null; + twitter_image: string | null; + twitter_title: string | null; + twitter_description: string | null; + meta_title: string | null; + meta_description: string | null; + codeinjection_head: string | null; + codeinjection_foot: string | null; + canonical_url: string | null; + accent_color: string; + url: string; +}; + +type Author = { + id: string; + name: string; + slug: string; + profile_image: string; + cover_image: string; + bio: string; + website: string; + location: string; + facebook: string | null; + twitter: string | null; + meta_title: string | null; + meta_description: string | null; + url: string; +};