From e2f56eaffc136b54ba9f11fb1dfbab71464af622 Mon Sep 17 00:00:00 2001 From: lucasbento Date: Sat, 14 Jun 2025 18:44:10 +0200 Subject: [PATCH] chore: fix TypeScript errors --- @types/global.d.ts | 12 ++++--- src/components/common/VersionSelector.tsx | 38 +++++++++++++---------- src/components/pages/Home.tsx | 11 ++++--- src/serviceWorker.ts | 11 +++++-- src/utils.ts | 6 ++++ src/utils/update-url.ts | 2 +- tsconfig.json | 2 +- 7 files changed, 52 insertions(+), 30 deletions(-) diff --git a/@types/global.d.ts b/@types/global.d.ts index 054694fb..f087d16c 100644 --- a/@types/global.d.ts +++ b/@types/global.d.ts @@ -1,8 +1,12 @@ interface Window {} -interface Process { - env: { - PUBLIC_URL: string - NODE_ENV: 'development' | 'production' +declare global { + namespace NodeJS { + interface ProcessEnv { + PUBLIC_URL: string + NODE_ENV: 'development' | 'production' + } } } + +export {} diff --git a/src/components/common/VersionSelector.tsx b/src/components/common/VersionSelector.tsx index eb5d7eae..c138a712 100644 --- a/src/components/common/VersionSelector.tsx +++ b/src/components/common/VersionSelector.tsx @@ -155,7 +155,7 @@ const getReleasedVersions = ({ releasedVersions: string[] minVersion?: string maxVersion?: string -}) => { +}): string[] => { const latestMajorReleaseVersion = getLatestMajorReleaseVersion(releasedVersions) @@ -181,14 +181,17 @@ const getFirstMajorRelease = ({ releasedVersions: string[] versionToCompare: string }) => - releasedVersions.find( - (releasedVersion) => + releasedVersions.find((releasedVersion) => { + const releasedVersionValid = semver.valid(semver.coerce(releasedVersion)) + const versionToCompareValid = semver.valid(semver.coerce(versionToCompare)) + + return ( semver.lt(releasedVersion, versionToCompare) && - semver.diff( - semver.valid(semver.coerce(releasedVersion)), - semver.valid(semver.coerce(versionToCompare)) - ) === 'minor' - ) + releasedVersionValid && + versionToCompareValid && + semver.diff(releasedVersionValid, versionToCompareValid) === 'minor' + ) + }) // Return if version exists in the ones returned from GitHub const doesVersionExist = ({ @@ -196,17 +199,18 @@ const doesVersionExist = ({ allVersions, minVersion, }: { - version: string + version: string | null allVersions: string[] minVersion?: string -}) => { +}): boolean => { try { + if (version === null) { + return false + } + return ( - version && allVersions.includes(version) && - // Also compare the version against a `minVersion`, this is used - // to not allow the user to have a `fromVersion` newer than `toVersion` - (!minVersion || (minVersion && semver.gt(version, minVersion))) + (!minVersion || semver.gt(version, minVersion)) ) } catch (_error) { return false @@ -234,8 +238,8 @@ const VersionSelector = ({ packageName, }) const [allVersions, setAllVersions] = useState([]) - const [fromVersionList, setFromVersionList] = useState([]) - const [toVersionList, setToVersionList] = useState([]) + const [fromVersionList, setFromVersionList] = useState([]) + const [toVersionList, setToVersionList] = useState([]) const [hasVersionsFromURL, setHasVersionsFromURL] = useState(false) const [localFromVersion, setLocalFromVersion] = useState('') @@ -281,7 +285,7 @@ const VersionSelector = ({ getFirstMajorRelease({ releasedVersions: sanitizedVersions, versionToCompare: toVersionToBeSet, - }) + }) || sanitizedVersions[sanitizedVersions.length - 1] // Fallback to last version if no major release found setFromVersionList( getReleasedVersions({ diff --git a/src/components/pages/Home.tsx b/src/components/pages/Home.tsx index e416e873..e863b624 100644 --- a/src/components/pages/Home.tsx +++ b/src/components/pages/Home.tsx @@ -24,6 +24,7 @@ import { DarkModeButton } from '../common/DarkModeButton' import { updateURL } from '../../utils/update-url' import { deviceSizes } from '../../utils/device-sizes' import { lightTheme, darkTheme, type Theme } from '../../theme' +import { CheckboxValueType } from 'antd/es/checkbox/Group' const Page = styled.div<{ theme?: Theme }>` background-color: ${({ theme }) => theme.background}; @@ -104,7 +105,7 @@ const getAppInfoInURL = () => { return { appPackage: pkg as string, - appName: name as string | null, + appName: name as string | undefined, } } @@ -198,9 +199,11 @@ const Home = () => { setShouldShowDiff(false) } - const handleSettingsChange = (settingsValues: string[]) => { - const normalizedIncomingSettings = settingsValues.reduce((acc, val) => { - acc[val] = true + const handleSettingsChange = (settingsValues: CheckboxValueType[]) => { + const normalizedIncomingSettings = settingsValues.reduce< + Record + >((acc, val) => { + acc[String(val)] = true return acc }, {}) diff --git a/src/serviceWorker.ts b/src/serviceWorker.ts index 1a2de194..f06827a5 100644 --- a/src/serviceWorker.ts +++ b/src/serviceWorker.ts @@ -20,7 +20,12 @@ const isLocalhost = Boolean( ) ) -export function register(config) { +interface ServiceWorkerConfig { + onSuccess?: (registration: ServiceWorkerRegistration) => void + onUpdate?: (registration: ServiceWorkerRegistration) => void +} + +export function register(config?: ServiceWorkerConfig) { if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { // The URL constructor is available in all browsers that support SW. const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href) @@ -54,7 +59,7 @@ export function register(config) { } } -function registerValidSW(swUrl, config) { +function registerValidSW(swUrl: string, config?: ServiceWorkerConfig) { navigator.serviceWorker .register(swUrl) .then((registration) => { @@ -98,7 +103,7 @@ function registerValidSW(swUrl, config) { }) } -function checkValidServiceWorker(swUrl, config) { +function checkValidServiceWorker(swUrl: string, config?: ServiceWorkerConfig) { // Check if the service worker can be found. If it can't reload the page. fetch(swUrl) .then((response) => { diff --git a/src/utils.ts b/src/utils.ts index 1ae109e2..08030885 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -115,9 +115,15 @@ export const getVersionsContentInDiff = ({ } const cleanedToVersion = semver.valid(semver.coerce(toVersion)) + if (!cleanedToVersion) { + return [] + } return versions[packageName].filter(({ version }) => { const cleanedVersion = semver.coerce(version) + if (!cleanedVersion) { + return false + } // `cleanedVersion` can't be newer than `cleanedToVersion` nor older (or equal) than `fromVersion` return ( diff --git a/src/utils/update-url.ts b/src/utils/update-url.ts index a2cfab94..cdc3e9f2 100644 --- a/src/utils/update-url.ts +++ b/src/utils/update-url.ts @@ -14,7 +14,7 @@ export function updateURL({ isPackageNameDefinedInURL: boolean fromVersion: string toVersion: string - appPackage: string + appPackage?: string appName?: string }) { const url = new URL(window.location.origin) diff --git a/tsconfig.json b/tsconfig.json index bb5bcf21..9a80ad33 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,6 @@ "module": "commonjs" } }, - "include": ["./src", "./assets"], + "include": ["./src", "./assets", "./@types"], "exclude": ["./src/__tests__/*"] }