Skip to content

Commit ccd40e2

Browse files
authored
Update linter dependencies (#114)
* Replace babel-eslint with @babel/eslint-parser as the former has been moved to the latter * Migrate to eslint-plugin-matrix-org Also add required peer dependencies * Run lint:fix * Add missing return types on functions * Allow empty interface types * Avoid unnecessary any * Allow any on exported types * Allow unknown object to string * Lint test files * Increase test coverage
1 parent 35d3e51 commit ccd40e2

16 files changed

+1632
-1026
lines changed

.eslintrc.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
module.exports = {
2-
extends: ["matrix-org"],
32
plugins: [
4-
"babel",
3+
"matrix-org",
54
],
5+
extends: [
6+
"plugin:matrix-org/babel",
7+
],
8+
parserOptions: {
9+
project: ["./tsconfig-dev.json"],
10+
},
611
env: {
712
browser: true,
813
},
@@ -29,12 +34,17 @@ module.exports = {
2934
},
3035
overrides: [{
3136
"files": ["src/**/*.ts", "test/**/*.ts"],
32-
"extends": ["matrix-org/ts"],
37+
"extends": ["plugin:matrix-org/typescript"],
3338
"rules": {
3439
// TypeScript has its own version of this
3540
"babel/no-invalid-this": "off",
3641

3742
"quotes": "off",
3843
},
44+
}, {
45+
"files": ["src/interfaces/**/*.ts"],
46+
"rules": {
47+
"@typescript-eslint/no-empty-object-type": "off",
48+
},
3949
}],
4050
};

package.json

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,26 @@
3737
"@action-validator/core": "^0.5.3",
3838
"@babel/cli": "^7.11.6",
3939
"@babel/core": "^7.11.6",
40+
"@babel/eslint-parser": "^7.25.9",
41+
"@babel/eslint-plugin": "^7.25.9",
4042
"@babel/plugin-proposal-class-properties": "^7.10.4",
4143
"@babel/preset-env": "^7.11.5",
4244
"@babel/preset-typescript": "^7.10.4",
4345
"@casualbot/jest-sonar-reporter": "^2.2.7",
46+
"@stylistic/eslint-plugin": "^2.10.1",
4447
"@testing-library/dom": "^8.0.0",
4548
"@types/jest": "^29.5.12",
4649
"@types/node": "^18.16.0",
47-
"babel-eslint": "^10.1.0",
50+
"@typescript-eslint/eslint-plugin": "^8.0.0",
51+
"@typescript-eslint/parser": "^8.0.0",
4852
"browserify": "^17.0.0",
49-
"eslint": "^7.8.1",
50-
"eslint-config-matrix-org": "^0.1.2",
53+
"eslint": "^8.0.0",
54+
"eslint-config-google": "^0.14.0",
55+
"eslint-config-prettier": "^9.0.0",
5156
"eslint-plugin-babel": "^5.3.1",
57+
"eslint-plugin-import": "^2.31.0",
58+
"eslint-plugin-matrix-org": "^2.0.0",
59+
"eslint-plugin-unicorn": "^56.0.0",
5260
"jest": "^29.5.0",
5361
"jest-environment-jsdom": "^29.5.0",
5462
"rimraf": "^3.0.2",

src/ClientWidgetApi.ts

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
import { EventEmitter } from "events";
18+
1819
import { ITransport } from "./transport/ITransport";
1920
import { Widget } from "./models/Widget";
2021
import { PostmessageTransport } from "./transport/PostmessageTransport";
@@ -213,12 +214,12 @@ export class ClientWidgetApi extends EventEmitter {
213214
return this.allowedEvents.some(e => e.matchesAsRoomAccountData(EventDirection.Receive, eventType));
214215
}
215216

216-
public stop() {
217+
public stop(): void {
217218
this.isStopped = true;
218219
this.transport.stop();
219220
}
220221

221-
private beginCapabilities() {
222+
private beginCapabilities(): void {
222223
// widget has loaded - tell all the listeners that
223224
this.emit("preparing");
224225

@@ -239,18 +240,18 @@ export class ClientWidgetApi extends EventEmitter {
239240
});
240241
}
241242

242-
private notifyCapabilities(requested: Capability[]) {
243+
private notifyCapabilities(requested: Capability[]): void {
243244
this.transport.send(WidgetApiToWidgetAction.NotifyCapabilities, <INotifyCapabilitiesActionRequestData>{
244245
requested: requested,
245246
approved: Array.from(this.allowedCapabilities),
246247
}).catch(e => {
247248
console.warn("non-fatal error notifying widget of approved capabilities:", e);
248249
}).then(() => {
249-
this.emit("capabilitiesNotified")
250+
this.emit("capabilitiesNotified");
250251
});
251252
}
252253

253-
private onIframeLoad(ev: Event) {
254+
private onIframeLoad(ev: Event): void {
254255
if (this.widget.waitForIframeLoad) {
255256
// If the widget is set to waitForIframeLoad the capabilities immediatly get setup after load.
256257
// The client does not wait for the ContentLoaded action.
@@ -268,7 +269,7 @@ export class ClientWidgetApi extends EventEmitter {
268269
}
269270
}
270271

271-
private handleContentLoadedAction(action: IContentLoadedActionRequest) {
272+
private handleContentLoadedAction(action: IContentLoadedActionRequest): void {
272273
if (this.contentLoadedWaitTimer !== undefined) {
273274
clearTimeout(this.contentLoadedWaitTimer);
274275
this.contentLoadedWaitTimer = undefined;
@@ -291,13 +292,13 @@ export class ClientWidgetApi extends EventEmitter {
291292
this.contentLoadedActionSent = true;
292293
}
293294

294-
private replyVersions(request: ISupportedVersionsActionRequest) {
295+
private replyVersions(request: ISupportedVersionsActionRequest): void {
295296
this.transport.reply<ISupportedVersionsActionResponseData>(request, {
296297
supported_versions: CurrentApiVersions,
297298
});
298299
}
299300

300-
private handleCapabilitiesRenegotiate(request: IRenegotiateCapabilitiesActionRequest) {
301+
private handleCapabilitiesRenegotiate(request: IRenegotiateCapabilitiesActionRequest): void {
301302
// acknowledge first
302303
this.transport.reply<IWidgetApiAcknowledgeResponseData>(request, {});
303304

@@ -318,7 +319,7 @@ export class ClientWidgetApi extends EventEmitter {
318319
});
319320
}
320321

321-
private handleNavigate(request: INavigateActionRequest) {
322+
private handleNavigate(request: INavigateActionRequest): void {
322323
if (!this.hasCapability(MatrixCapabilities.MSC2931Navigate)) {
323324
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
324325
error: {message: "Missing capability"},
@@ -331,7 +332,7 @@ export class ClientWidgetApi extends EventEmitter {
331332
});
332333
}
333334

334-
const onErr = (e: unknown) => {
335+
const onErr = (e: unknown): void => {
335336
console.error("[ClientWidgetApi] Failed to handle navigation: ", e);
336337
this.handleDriverError(e, request, "Error handling navigation");
337338
};
@@ -345,10 +346,10 @@ export class ClientWidgetApi extends EventEmitter {
345346
}
346347
}
347348

348-
private handleOIDC(request: IGetOpenIDActionRequest) {
349+
private handleOIDC(request: IGetOpenIDActionRequest): void {
349350
let phase = 1; // 1 = initial request, 2 = after user manual confirmation
350351

351-
const replyState = (state: OpenIDRequestState, credential?: IOpenIDCredentials) => {
352+
const replyState = (state: OpenIDRequestState, credential?: IOpenIDCredentials): void | Promise<IWidgetApiAcknowledgeResponseData> => {
352353
credential = credential || {};
353354
if (phase > 1) {
354355
return this.transport.send<IOpenIDCredentialsActionRequestData>(
@@ -367,7 +368,7 @@ export class ClientWidgetApi extends EventEmitter {
367368
}
368369
};
369370

370-
const replyError = (msg: string) => {
371+
const replyError = (msg: string): void | Promise<IWidgetApiAcknowledgeResponseData> => {
371372
console.error("[ClientWidgetApi] Failed to handle OIDC: ", msg);
372373
if (phase > 1) {
373374
// We don't have a way to indicate that a random error happened in this flow, so
@@ -405,7 +406,7 @@ export class ClientWidgetApi extends EventEmitter {
405406

406407
this.driver.askOpenID(observer);
407408
}
408-
private handleReadRoomAccountData(request: IReadRoomAccountDataFromWidgetActionRequest) {
409+
private handleReadRoomAccountData(request: IReadRoomAccountDataFromWidgetActionRequest): void | Promise<void> {
409410
let events: Promise<IRoomAccountData[]> = Promise.resolve([]);
410411
events = this.driver.readRoomAccountData(request.data.type);
411412

@@ -416,11 +417,11 @@ export class ClientWidgetApi extends EventEmitter {
416417
}
417418

418419
return events.then((evs) => {
419-
this.transport.reply<IReadRoomAccountDataFromWidgetResponseData>(request, {events: evs})
420+
this.transport.reply<IReadRoomAccountDataFromWidgetResponseData>(request, {events: evs});
420421
});
421422
}
422423

423-
private handleReadEvents(request: IReadEventFromWidgetActionRequest) {
424+
private handleReadEvents(request: IReadEventFromWidgetActionRequest): void | Promise<void> {
424425
if (!request.data.type) {
425426
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
426427
error: {message: "Invalid request - missing event type"},
@@ -434,9 +435,10 @@ export class ClientWidgetApi extends EventEmitter {
434435

435436
let askRoomIds: string[] | null = null; // null denotes current room only
436437
if (request.data.room_ids) {
437-
askRoomIds = request.data.room_ids as string[];
438-
if (!Array.isArray(askRoomIds)) {
439-
askRoomIds = [askRoomIds as any as string];
438+
if (Array.isArray(request.data.room_ids)) {
439+
askRoomIds = request.data.room_ids;
440+
} else {
441+
askRoomIds = [request.data.room_ids];
440442
}
441443
for (const roomId of askRoomIds) {
442444
if (!this.canUseRoomTimeline(roomId)) {
@@ -471,7 +473,7 @@ export class ClientWidgetApi extends EventEmitter {
471473
return events.then(evs => this.transport.reply<IReadEventFromWidgetResponseData>(request, {events: evs}));
472474
}
473475

474-
private handleSendEvent(request: ISendEventFromWidgetActionRequest) {
476+
private handleSendEvent(request: ISendEventFromWidgetActionRequest): void {
475477
if (!request.data.type) {
476478
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
477479
error: {message: "Invalid request - missing event type"},
@@ -559,7 +561,7 @@ export class ClientWidgetApi extends EventEmitter {
559561
});
560562
}
561563

562-
private handleUpdateDelayedEvent(request: IUpdateDelayedEventFromWidgetActionRequest) {
564+
private handleUpdateDelayedEvent(request: IUpdateDelayedEventFromWidgetActionRequest): void {
563565
if (!request.data.delay_id) {
564566
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
565567
error: {message: "Invalid request - missing delay_id"},
@@ -618,7 +620,7 @@ export class ClientWidgetApi extends EventEmitter {
618620
}
619621
}
620622

621-
private async pollTurnServers(turnServers: AsyncGenerator<ITurnServer>, initialServer: ITurnServer) {
623+
private async pollTurnServers(turnServers: AsyncGenerator<ITurnServer>, initialServer: ITurnServer): Promise<void> {
622624
try {
623625
await this.transport.send<IUpdateTurnServersRequestData>(
624626
WidgetApiToWidgetAction.UpdateTurnServers,
@@ -683,7 +685,7 @@ export class ClientWidgetApi extends EventEmitter {
683685
}
684686
}
685687

686-
private async handleReadRelations(request: IReadRelationsFromWidgetActionRequest) {
688+
private async handleReadRelations(request: IReadRelationsFromWidgetActionRequest): Promise<void> {
687689
if (!request.data.event_id) {
688690
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
689691
error: { message: "Invalid request - missing event ID" },
@@ -732,7 +734,7 @@ export class ClientWidgetApi extends EventEmitter {
732734
}
733735
}
734736

735-
private async handleUserDirectorySearch(request: IUserDirectorySearchFromWidgetActionRequest) {
737+
private async handleUserDirectorySearch(request: IUserDirectorySearchFromWidgetActionRequest): Promise<void> {
736738
if (!this.hasCapability(MatrixCapabilities.MSC3973UserDirectorySearch)) {
737739
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
738740
error: { message: "Missing capability" },
@@ -773,15 +775,15 @@ export class ClientWidgetApi extends EventEmitter {
773775
}
774776
}
775777

776-
private async handleGetMediaConfig(request: IGetMediaConfigActionFromWidgetActionRequest) {
778+
private async handleGetMediaConfig(request: IGetMediaConfigActionFromWidgetActionRequest): Promise<void> {
777779
if (!this.hasCapability(MatrixCapabilities.MSC4039UploadFile)) {
778780
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
779781
error: { message: "Missing capability" },
780782
});
781783
}
782784

783785
try {
784-
const result = await this.driver.getMediaConfig()
786+
const result = await this.driver.getMediaConfig();
785787

786788
return this.transport.reply<IGetMediaConfigActionFromWidgetResponseData>(
787789
request,
@@ -793,7 +795,7 @@ export class ClientWidgetApi extends EventEmitter {
793795
}
794796
}
795797

796-
private async handleUploadFile(request: IUploadFileActionFromWidgetActionRequest) {
798+
private async handleUploadFile(request: IUploadFileActionFromWidgetActionRequest): Promise<void> {
797799
if (!this.hasCapability(MatrixCapabilities.MSC4039UploadFile)) {
798800
return this.transport.reply<IWidgetApiErrorResponseData>(request, {
799801
error: { message: "Missing capability" },
@@ -833,7 +835,7 @@ export class ClientWidgetApi extends EventEmitter {
833835
}
834836
}
835837

836-
private handleDriverError(e: unknown, request: IWidgetApiRequest, message: string) {
838+
private handleDriverError(e: unknown, request: IWidgetApiRequest, message: string): void {
837839
const data = this.driver.processError(e);
838840
this.transport.reply<IWidgetApiErrorResponseData>(request, {
839841
error: {
@@ -843,7 +845,7 @@ export class ClientWidgetApi extends EventEmitter {
843845
});
844846
}
845847

846-
private handleMessage(ev: CustomEvent<IWidgetApiRequest>) {
848+
private handleMessage(ev: CustomEvent<IWidgetApiRequest>): void | Promise<void> {
847849
if (this.isStopped) return;
848850
const actionEv = new CustomEvent(`action:${ev.detail.action}`, {
849851
detail: ev.detail,
@@ -875,7 +877,7 @@ export class ClientWidgetApi extends EventEmitter {
875877
case WidgetApiFromWidgetAction.MSC3869ReadRelations:
876878
return this.handleReadRelations(<IReadRelationsFromWidgetActionRequest>ev.detail);
877879
case WidgetApiFromWidgetAction.MSC3973UserDirectorySearch:
878-
return this.handleUserDirectorySearch(<IUserDirectorySearchFromWidgetActionRequest>ev.detail)
880+
return this.handleUserDirectorySearch(<IUserDirectorySearchFromWidgetActionRequest>ev.detail);
879881
case WidgetApiFromWidgetAction.BeeperReadRoomAccountData:
880882
return this.handleReadRoomAccountData(<IReadRoomAccountDataFromWidgetActionRequest>ev.detail);
881883
case WidgetApiFromWidgetAction.MSC4039GetMediaConfigAction:

0 commit comments

Comments
 (0)