chore: upgrade TypeScript 4.9 to 5.9, ESLint 8.29 to 8.57, @typescript-eslint 5 to 7

Resolves all TS2345/TS2347/TS7006 type errors introduced by stricter TypeScript 5.x.
Fix Icons.Settings to Icons.Setting, cast account data returns, fix implicit any.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lotus Bot
2026-05-22 11:16:11 -04:00
parent e547248681
commit 266e47f240
33 changed files with 389 additions and 334 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
import { CallMembership, SessionMembershipData } from 'matrix-js-sdk/lib/matrixrtc/CallMembership';
import { CallMembership } from 'matrix-js-sdk/lib/matrixrtc/CallMembership';
import { type SessionMembershipData } from 'matrix-js-sdk/lib/matrixrtc';
import React, { useState } from 'react';
import { Avatar, Box, Icon, Icons, Text } from 'folds';
import { useMatrixClient } from '../../hooks/useMatrixClient';
@@ -58,7 +58,8 @@ export function DeveloperTools({ requestClose }: DeveloperToolsProps) {
const submitAccountData: AccountDataSubmitCallback = useCallback(
async (type, content) => {
await mx.setRoomAccountData(room.roomId, type, content);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
await mx.setRoomAccountData(room.roomId, type as any, content);
},
[mx, room.roomId],
);
+1 -1
View File
@@ -814,7 +814,7 @@ export const RoomInput = forwardRef<HTMLDivElement, RoomInputProps>(
)}
{gifError && (
<Text
size="T100"
size="T200"
style={{
color: 'var(--tc-danger-normal)',
padding: '2px 6px',
+1 -1
View File
@@ -27,7 +27,7 @@ import { HTMLReactParserOptions } from 'html-react-parser';
import classNames from 'classnames';
import { ReactEditor } from 'slate-react';
import { Editor } from 'slate';
import { SessionMembershipData } from 'matrix-js-sdk/lib/matrixrtc/CallMembership';
import { type SessionMembershipData } from 'matrix-js-sdk/lib/matrixrtc';
import to from 'await-to-js';
import { useAtomValue, useSetAtom } from 'jotai';
import {
@@ -39,7 +39,8 @@ export function ForwardMessageDialog({ mEvent, onClose }: Props) {
const forward = (roomId: string, roomName: string) => {
const fwdContent: Record<string, unknown> = { ...mEvent.getContent() };
delete fwdContent['m.relates_to'];
mx.sendEvent(roomId, mEvent.getType(), fwdContent as any);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(mx as any).sendEvent(roomId, mEvent.getType(), fwdContent);
setSentTo(roomName);
setTimeout(onClose, 1200);
};
@@ -83,6 +83,7 @@ import { MemberPowerTag, StateEvent } from '../../../../types/matrix/room';
import { PowerIcon } from '../../../components/power';
import colorMXID from '../../../../util/colorMXID';
import { getPowerTagIconSrc } from '../../../hooks/useMemberPowerTag';
import { ForwardMessageDialog } from './ForwardMessageDialog';
// Delivery status indicator for own messages
function DeliveryStatus({
@@ -153,7 +153,8 @@ export const MessageEditor = as<'div', MessageEditorProps>(
},
};
return mx.sendMessage(roomId, content);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return mx.sendMessage(roomId, content as any);
}, [mx, editor, roomId, mEvent, isMarkdown, getPrevBodyAndFormattedBody]),
);
+8 -8
View File
@@ -54,8 +54,8 @@ export const getImageMsgContent = async (
const content: IContent = {
msgtype: MsgType.Image,
filename: file.name,
body: metadata.caption?.trim() || file.name,
filename: (file as File).name,
body: metadata.caption?.trim() || (file as File).name,
[MATRIX_SPOILER_PROPERTY_NAME]: metadata.markedAsSpoiler,
};
if (imgEl) {
@@ -89,8 +89,8 @@ export const getVideoMsgContent = async (
const content: IContent = {
msgtype: MsgType.Video,
filename: file.name,
body: metadata.caption?.trim() || file.name,
filename: (file as File).name,
body: metadata.caption?.trim() || (file as File).name,
[MATRIX_SPOILER_PROPERTY_NAME]: metadata.markedAsSpoiler,
};
if (videoEl) {
@@ -130,8 +130,8 @@ export const getAudioMsgContent = (item: TUploadItem, mxc: string): IContent =>
const { file, encInfo } = item;
const content: IContent = {
msgtype: MsgType.Audio,
filename: file.name,
body: file.name,
filename: (file as File).name,
body: (file as File).name,
info: {
mimetype: file.type,
size: file.size,
@@ -152,8 +152,8 @@ export const getFileMsgContent = (item: TUploadItem, mxc: string): IContent => {
const { file, encInfo } = item;
const content: IContent = {
msgtype: MsgType.File,
body: file.name,
filename: file.name,
body: (file as File).name,
filename: (file as File).name,
info: {
mimetype: file.type,
size: file.size,
+1 -1
View File
@@ -251,7 +251,7 @@ export function Search({ requestClose }: SearchProps) {
allowOutsideClick: true,
clickOutsideDeactivates: true,
onDeactivate: requestClose,
escapeDeactivates: (evt) => {
escapeDeactivates: (evt: KeyboardEvent) => {
evt.stopPropagation();
return true;
},
@@ -25,7 +25,7 @@ export function DeveloperTools({ requestClose }: DeveloperToolsProps) {
const submitAccountData: AccountDataSubmitCallback = useCallback(
async (type, content) => {
await mx.setAccountData(type, content);
await (mx as any).setAccountData(type, content);
},
[mx],
);
@@ -34,7 +34,9 @@ export function DeveloperTools({ requestClose }: DeveloperToolsProps) {
return (
<AccountDataEditor
type={accountDataType ?? undefined}
content={accountDataType ? mx.getAccountData(accountDataType)?.getContent() : undefined}
content={
accountDataType ? (mx as any).getAccountData(accountDataType)?.getContent() : undefined
}
submitChange={submitAccountData}
requestClose={() => setAccountDataType(undefined)}
/>
@@ -1,3 +1,4 @@
import { MatrixEvent } from 'matrix-js-sdk';
import React, { MouseEventHandler, useCallback, useEffect, useMemo, useState } from 'react';
import {
Box,
@@ -303,7 +304,9 @@ export function GlobalPacks({ onViewPack }: GlobalPacksProps) {
const [applyState, applyChanges] = useAsyncCallback(
useCallback(async () => {
const content =
mx.getAccountData(AccountDataEvent.PoniesEmoteRooms)?.getContent<EmoteRoomsContent>() ?? {};
(
(mx as any).getAccountData(AccountDataEvent.PoniesEmoteRooms) as MatrixEvent | undefined
)?.getContent<EmoteRoomsContent>() ?? {};
const updatedContent: EmoteRoomsContent = JSON.parse(JSON.stringify(content));
selectedPacks.forEach((addr) => {
@@ -320,7 +323,7 @@ export function GlobalPacks({ onViewPack }: GlobalPacksProps) {
}
});
await mx.setAccountData(AccountDataEvent.PoniesEmoteRooms, updatedContent);
await (mx as any).setAccountData(AccountDataEvent.PoniesEmoteRooms, updatedContent);
}, [mx, selectedPacks, removedPacks]),
);
@@ -192,7 +192,7 @@ export function KeywordMessagesNotifications() {
<KeywordInput />
</SettingTile>
</SequenceCard>
{keywordPushRules.map((pushRule) => (
{keywordPushRules.map((pushRule: any) => (
<SequenceCard
key={pushRule.rule_id}
className={SequenceCardStyle}