diff --git a/package.json b/package.json index b8b5148a1..c5069c839 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@astrojs/mdx": "^4.2.6", "@astrojs/sitemap": "^3.3.1", "@astrojs/tailwind": "^5.1.5", + "@astrojs/ts-plugin": "^1.10.4", "@fortawesome/fontawesome-free": "^6.7.2", "@tailwindcss/typography": "^0.5.16", "astro": "^5.7.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ffad7697..ada9fb27c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: '@astrojs/tailwind': specifier: ^5.1.5 version: 5.1.5(astro@5.7.10(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1))(tailwindcss@3.4.17) + '@astrojs/ts-plugin': + specifier: ^1.10.4 + version: 1.10.4 '@fortawesome/fontawesome-free': specifier: ^6.7.2 version: 6.7.2 @@ -164,6 +167,9 @@ packages: resolution: {integrity: sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} + '@astrojs/ts-plugin@1.10.4': + resolution: {integrity: sha512-rapryQINgv5VLZF884R/wmgX3mM9eH1PC/I3kkPV9rP6lEWrRN1YClF3bGcDHFrf8EtTLc0Wqxne1Uetpevozg==} + '@astrojs/yaml2ts@0.2.2': resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} @@ -3208,6 +3214,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@astrojs/ts-plugin@1.10.4': + dependencies: + '@astrojs/compiler': 2.11.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@volar/language-core': 2.4.13 + '@volar/typescript': 2.4.13 + semver: 7.7.1 + vscode-languageserver-textdocument: 1.0.12 + '@astrojs/yaml2ts@0.2.2': dependencies: yaml: 2.7.1 diff --git a/src/components/schedule/day.astro b/src/components/schedule/day.astro index 969231505..092893687 100644 --- a/src/components/schedule/day.astro +++ b/src/components/schedule/day.astro @@ -51,7 +51,7 @@ type ScheduleSession = { end: Date; endTime: string; duration: number; - sessionType?: string; + sessionType?: string | undefined; type: string; rooms: string[]; }; @@ -331,9 +331,6 @@ const dateText = format(date, "eeee - do MMMM"); ); const endStart = numberToTime(lastEndTime); - const endStartDate = addMinutes(parseISO(dayName), lastEndTime); - const endEndDate = addMinutes(endStartDate, 10); - const endEnd = numberToTime(lastEndTime + 10); --- diff --git a/src/components/sections/keynoters/keynoter.astro b/src/components/sections/keynoters/keynoter.astro index 4f4635626..38a615c46 100644 --- a/src/components/sections/keynoters/keynoter.astro +++ b/src/components/sections/keynoters/keynoter.astro @@ -11,10 +11,10 @@ import Person5 from "./placeholders/person-5.astro"; export interface Props { name: string; slug: string; - tagline?: string; + tagline?: string | undefined; image?: ImageMetadata; - placeholder?: boolean; - order?: number; + placeholder?: boolean | undefined; + order?: number | undefined; class?: string; } diff --git a/src/components/sections/speakers.astro b/src/components/sections/speakers.astro index 80a408ad6..3b0f6e14c 100644 --- a/src/components/sections/speakers.astro +++ b/src/components/sections/speakers.astro @@ -79,7 +79,7 @@ const sectionSubtitle = "Meet some of our amazing speakers"; let currentPosition = 0; const scrollSpeed = 4000; - let slidingInterval: ReturnType | null = null; + let slidingInterval: number | null = null; // Function to determine slides per view based on window width function getSlidesPerView() { @@ -110,7 +110,7 @@ const sectionSubtitle = "Meet some of our amazing speakers"; function startAnimation(slideWidth: number) { // Initial setup moveCarousel(); - slidingInterval = setInterval(moveCarousel, scrollSpeed); + slidingInterval = window.setInterval(moveCarousel, scrollSpeed) as number; function moveCarousel() { currentPosition += slideWidth; diff --git a/src/content/sponsors/pycon-fi/pycon-fi.svg b/src/content/sponsors/pycon-fi/pycon-fi.svg index 1cf680870..d632708e2 100644 --- a/src/content/sponsors/pycon-fi/pycon-fi.svg +++ b/src/content/sponsors/pycon-fi/pycon-fi.svg @@ -7,11 +7,34 @@ width="237.114pt" height="89.039001pt" viewBox="-3 -3 321.75871 120.8239" + sodipodi:docname="pycon-fi.svg" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + @@ -94,32 +117,32 @@ PyCon FinlandFriday 17 Oct 2025Friday 17 Oct 2025JyväskyläIn cooperation with PloneConf diff --git a/tsconfig.json b/tsconfig.json index b8d54e624..a8a536cb7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,17 @@ "compilerOptions": { "strictNullChecks": true, "noImplicitAny": false, + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + // TODO: around 63 errors to clean up + // "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "paths": { "@utils/*": ["./src/utils/*"], "@data/*": ["./src/data/*"], @@ -15,5 +26,10 @@ "@i18n/*": ["./src/i18n/*"], "@src/*": ["./src/*"] } - } + }, + "plugins": [ + { + "name": "@astrojs/ts-plugin" + } + ] }