From fc28d125f10ac65a13a4d478872d3cc446ff43d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 14:22:25 +0000 Subject: [PATCH 1/7] [deps]: Update typescript to v6 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1dd504b0d..94d00da4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "husky": "9.1.7", "lint-staged": "16.4.0", "prettier": "3.8.1", - "typescript": "5.9.2" + "typescript": "6.0.2" }, "engines": { "node": "~22.14.0", @@ -19959,9 +19959,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "devOptional": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 24416d27b..f3f81ad45 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "husky": "9.1.7", "lint-staged": "16.4.0", "prettier": "3.8.1", - "typescript": "5.9.2" + "typescript": "6.0.2" }, "browserslist": { "production": [ From e0e61bd2c69031dae84413068e6e84872f8f7a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 11:16:23 -0400 Subject: [PATCH 2/7] fix `JSX` import; disable remaining typechecks --- src/components/AdrTable.tsx | 4 +++- src/components/Bitwarden.tsx | 4 +++- src/components/Community.tsx | 2 +- src/components/DevDropdown/index.tsx | 4 +++- src/contexts/devMode.tsx | 2 +- src/theme/Layout/Provider/index.tsx | 2 +- tsconfig.json | 6 +++++- 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/components/AdrTable.tsx b/src/components/AdrTable.tsx index c915e1dba..3bf1dd69c 100644 --- a/src/components/AdrTable.tsx +++ b/src/components/AdrTable.tsx @@ -1,3 +1,5 @@ +// FIXME: remove @ts-nocheck and address type errors in this file +// @ts-nocheck import React from "react"; const formatDate = (date: Date) => { @@ -14,7 +16,7 @@ const badgeColors = { Superseded: "warning", }; -export default function AdrTable({ frontMatter }): JSX.Element { +export default function AdrTable({ frontMatter }): React.JSX.Element { return ( diff --git a/src/components/Bitwarden.tsx b/src/components/Bitwarden.tsx index b31171db7..32a8931ba 100644 --- a/src/components/Bitwarden.tsx +++ b/src/components/Bitwarden.tsx @@ -1,7 +1,9 @@ +// FIXME: remove @ts-nocheck and address type errors in this file +// @ts-nocheck import React from "react"; import { useDevMode } from "../contexts/devMode"; -export default function Bitwarden({ children }): JSX.Element { +export default function Bitwarden({ children }): React.JSX.Element { const { devMode } = useDevMode(); if (devMode === "bitwarden") { diff --git a/src/components/Community.tsx b/src/components/Community.tsx index 9011f6212..32c714c5c 100644 --- a/src/components/Community.tsx +++ b/src/components/Community.tsx @@ -1,7 +1,7 @@ import React from "react"; import { useDevMode } from "../contexts/devMode"; -export default function Community({ children }): JSX.Element { +export default function Community({ children }): React.JSX.Element { const { devMode } = useDevMode(); if (devMode === "community") { diff --git a/src/components/DevDropdown/index.tsx b/src/components/DevDropdown/index.tsx index c3cdc7633..ee1ce75b5 100644 --- a/src/components/DevDropdown/index.tsx +++ b/src/components/DevDropdown/index.tsx @@ -1,3 +1,5 @@ +// FIXME: remove @ts-nocheck and address type errors in this file +// @ts-nocheck import React from "react"; import DropdownNavbarItem from "@theme-original/NavbarItem/DropdownNavbarItem"; import { useDevMode, DevModes } from "@site/src/contexts/devMode"; @@ -18,7 +20,7 @@ export default function DevDropdown({ dropdownItemsBefore, dropdownItemsAfter, ...props -}): JSX.Element { +}): React.JSX.Element { const { devMode, setDevMode } = useDevMode(); const items = dropdownOptions.map((item) => { diff --git a/src/contexts/devMode.tsx b/src/contexts/devMode.tsx index 0ff88758b..9c2b6a417 100644 --- a/src/contexts/devMode.tsx +++ b/src/contexts/devMode.tsx @@ -74,7 +74,7 @@ function useContextValue(): ContextValue { ); } -export function DevModeProvider({ children }: { children: ReactNode }): JSX.Element { +export function DevModeProvider({ children }: { children: ReactNode }): React.JSX.Element { const value = useContextValue(); return {children}; } diff --git a/src/theme/Layout/Provider/index.tsx b/src/theme/Layout/Provider/index.tsx index 6eb1791c9..57dda1a77 100644 --- a/src/theme/Layout/Provider/index.tsx +++ b/src/theme/Layout/Provider/index.tsx @@ -7,7 +7,7 @@ import { DevModeProvider } from "@site/src/contexts/devMode"; const Provider = composeProviders([DevModeProvider]); -export default function LayoutProvider({ children }: Props): JSX.Element { +export default function LayoutProvider({ children }: Props): React.JSX.Element { return ( {children} diff --git a/tsconfig.json b/tsconfig.json index 314eab8a4..089cdec85 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,10 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@docusaurus/tsconfig", "compilerOptions": { - "baseUrl": "." + "baseUrl": null, + "types": ["remark-kroki"], + "paths": { + "@site/*": ["./*"] + } } } From 05f9698b2a34331cce12e92ba1f07582fb775442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 11:20:10 -0400 Subject: [PATCH 3/7] remove incorrect type import for remark-kroki --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 089cdec85..6682a5637 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,6 @@ "extends": "@docusaurus/tsconfig", "compilerOptions": { "baseUrl": null, - "types": ["remark-kroki"], "paths": { "@site/*": ["./*"] } From 300001c8d63488f33e1f9c9dc96b4eab91ae9e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 11:26:39 -0400 Subject: [PATCH 4/7] additional `FIXME` --- src/components/Community.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Community.tsx b/src/components/Community.tsx index 32c714c5c..5061d8a5d 100644 --- a/src/components/Community.tsx +++ b/src/components/Community.tsx @@ -1,3 +1,5 @@ +// FIXME: remove @ts-nocheck and address type errors in this file +// @ts-nocheck import React from "react"; import { useDevMode } from "../contexts/devMode"; From 3f6b8f274fc63764fdfa44818969b4e517cfe744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 11:32:28 -0400 Subject: [PATCH 5/7] add type definition to fix `remark-kroki` type lookup failure --- types/remark-kroki.d.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 types/remark-kroki.d.ts diff --git a/types/remark-kroki.d.ts b/types/remark-kroki.d.ts new file mode 100644 index 000000000..14faa22c6 --- /dev/null +++ b/types/remark-kroki.d.ts @@ -0,0 +1,14 @@ +// FIXME: delete this file once `remark-kroki` ships its own type definitions +// (or once `@types/remark-kroki` is published on DefinitelyTyped). Track +// upstream at https://github.com/show-docs/remark-kroki. +declare module "remark-kroki" { + export interface RemarkKrokiOptions { + server?: string; + headers?: Record; + alias?: string[]; + output?: string; + target?: "html" | "mdx3"; + } + + export function remarkKroki(options?: RemarkKrokiOptions): (tree: unknown) => Promise; +} From 934545c688bb2fa5db63ea230bbe9252c81693da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 11:58:47 -0400 Subject: [PATCH 6/7] replace FIXMEs with typechecking fixes --- src/components/AdrTable.tsx | 31 ++++++++++++++++++-------- src/components/Bitwarden.tsx | 6 ++--- src/components/Community.tsx | 6 ++--- src/components/DevDropdown/index.tsx | 33 +++++++++++++++------------- 4 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/components/AdrTable.tsx b/src/components/AdrTable.tsx index 3bf1dd69c..9f06eb8a4 100644 --- a/src/components/AdrTable.tsx +++ b/src/components/AdrTable.tsx @@ -1,11 +1,11 @@ -// FIXME: remove @ts-nocheck and address type errors in this file -// @ts-nocheck import React from "react"; -const formatDate = (date: Date) => { +const formatDate = (date: Date): string | undefined => { try { return date.toISOString().split("T")[0]; - } catch {} + } catch { + return undefined; + } }; const badgeColors = { @@ -16,7 +16,22 @@ const badgeColors = { Superseded: "warning", }; -export default function AdrTable({ frontMatter }): React.JSX.Element { +const isBadgeColorKey = (key: string): key is keyof typeof badgeColors => key in badgeColors; + +interface AdrFrontMatter { + adr: string; + status?: string; + date: Date; +} + +export default function AdrTable({ + frontMatter, +}: { + frontMatter: AdrFrontMatter; +}): React.JSX.Element { + const { status } = frontMatter; + const badgeColor = status && isBadgeColorKey(status) ? badgeColors[status] : "secondary"; + return (
@@ -24,13 +39,11 @@ export default function AdrTable({ frontMatter }): React.JSX.Element { - {frontMatter.status && ( + {status && ( )} diff --git a/src/components/Bitwarden.tsx b/src/components/Bitwarden.tsx index 32a8931ba..4102b8d4f 100644 --- a/src/components/Bitwarden.tsx +++ b/src/components/Bitwarden.tsx @@ -1,9 +1,7 @@ -// FIXME: remove @ts-nocheck and address type errors in this file -// @ts-nocheck -import React from "react"; +import React, { type ReactNode } from "react"; import { useDevMode } from "../contexts/devMode"; -export default function Bitwarden({ children }): React.JSX.Element { +export default function Bitwarden({ children }: { children: ReactNode }): React.JSX.Element { const { devMode } = useDevMode(); if (devMode === "bitwarden") { diff --git a/src/components/Community.tsx b/src/components/Community.tsx index 5061d8a5d..03ed5bcd9 100644 --- a/src/components/Community.tsx +++ b/src/components/Community.tsx @@ -1,9 +1,7 @@ -// FIXME: remove @ts-nocheck and address type errors in this file -// @ts-nocheck -import React from "react"; +import React, { type ReactNode } from "react"; import { useDevMode } from "../contexts/devMode"; -export default function Community({ children }): React.JSX.Element { +export default function Community({ children }: { children: ReactNode }): React.JSX.Element { const { devMode } = useDevMode(); if (devMode === "community") { diff --git a/src/components/DevDropdown/index.tsx b/src/components/DevDropdown/index.tsx index ee1ce75b5..9eca7ca6c 100644 --- a/src/components/DevDropdown/index.tsx +++ b/src/components/DevDropdown/index.tsx @@ -1,7 +1,7 @@ -// FIXME: remove @ts-nocheck and address type errors in this file -// @ts-nocheck import React from "react"; import DropdownNavbarItem from "@theme-original/NavbarItem/DropdownNavbarItem"; +import type { Props as DropdownNavbarItemProps } from "@theme/NavbarItem/DropdownNavbarItem"; +import type { LinkLikeNavbarItemProps } from "@theme/NavbarItem"; import { useDevMode, DevModes } from "@site/src/contexts/devMode"; const dropdownOptions = [ @@ -13,28 +13,31 @@ const dropdownOptions = [ id: DevModes.bitwarden, label: "Bitwarden Developer", }, -]; +] as const; + +interface Props extends Omit { + readonly dropdownItemsBefore?: LinkLikeNavbarItemProps[]; + readonly dropdownItemsAfter?: LinkLikeNavbarItemProps[]; +} export default function DevDropdown({ mobile, dropdownItemsBefore, dropdownItemsAfter, ...props -}): React.JSX.Element { +}: Props): React.JSX.Element { const { devMode, setDevMode } = useDevMode(); - const items = dropdownOptions.map((item) => { - return { - label: item.label, - to: "#", - onClick: (e) => { - setDevMode(item.id); - e.preventDefault(); - }, - }; - }); + const items: DropdownNavbarItemProps["items"] = dropdownOptions.map((item) => ({ + label: item.label, + to: "#", + onClick: (e: React.MouseEvent) => { + setDevMode(item.id); + e.preventDefault(); + }, + })); - const dropdownLabel = dropdownOptions.find((i) => i.id == devMode).label; + const dropdownLabel = dropdownOptions.find((i) => i.id === devMode)?.label; return ; } From e956f1f8cb287265adb6c380dd7f727854eb3f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Audrey=20=E2=9C=A8?= Date: Tue, 21 Apr 2026 12:09:55 -0400 Subject: [PATCH 7/7] use enum-like pattern --- src/components/AdrTable.tsx | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/components/AdrTable.tsx b/src/components/AdrTable.tsx index 9f06eb8a4..de50ad543 100644 --- a/src/components/AdrTable.tsx +++ b/src/components/AdrTable.tsx @@ -8,15 +8,27 @@ const formatDate = (date: Date): string | undefined => { } }; -const badgeColors = { - Proposed: "primary", - Accepted: "success", - Rejected: "danger", - Deprecated: "warning", - Superseded: "warning", +const AdrStatus = { + Proposed: "Proposed", + Accepted: "Accepted", + Rejected: "Rejected", + Deprecated: "Deprecated", + Superseded: "Superseded", +} as const; + +type AdrStatus = (typeof AdrStatus)[keyof typeof AdrStatus]; + +const badgeColors: Record = { + [AdrStatus.Proposed]: "primary", + [AdrStatus.Accepted]: "success", + [AdrStatus.Rejected]: "danger", + [AdrStatus.Deprecated]: "warning", + [AdrStatus.Superseded]: "warning", }; -const isBadgeColorKey = (key: string): key is keyof typeof badgeColors => key in badgeColors; +function isAdrStatus(value: unknown): value is AdrStatus { + return typeof value === "string" && value in AdrStatus; +} interface AdrFrontMatter { adr: string; @@ -30,7 +42,7 @@ export default function AdrTable({ frontMatter: AdrFrontMatter; }): React.JSX.Element { const { status } = frontMatter; - const badgeColor = status && isBadgeColorKey(status) ? badgeColors[status] : "secondary"; + const badgeColor = isAdrStatus(status) ? badgeColors[status] : "secondary"; return (
ID: ADR-{frontMatter.adr}
Status: - - {frontMatter.status?.toUpperCase()} - + {status.toUpperCase()}