From c0fab57686563e0d907e30608616b2e6db556d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20E=2E?= Date: Thu, 20 Feb 2025 11:35:07 +0100 Subject: [PATCH 1/2] [Misc] Code style: get rid of 'any' types --- api/src/api/PageData.ts | 6 ++-- api/src/api/WikiConfig.ts | 4 +-- api/src/api/document.ts | 12 ++----- api/src/api/logger.ts | 16 +++------ api/src/components/DefaultPageData.ts | 35 +++++++++++-------- api/src/components/JSONLDDocument.ts | 26 ++++++-------- api/src/components/defaultLogger.ts | 16 +++------ api/src/components/defaultWikiConfig.ts | 30 ++++++++++------ .../backend-xwiki/src/xwikiStorage.ts | 2 +- .../src/parseInternalImages.ts | 3 +- .../src/parseInternalLinks.ts | 3 +- ds/vuetify/src/vue/__tests__/utils/vuetify.ts | 3 +- .../src/components/wikimodel-teavm.ts | 4 +-- .../rendering/src/components/wikimodel.ts | 4 +-- .../impl/src/components/defaultQueueWorker.ts | 4 +-- skin/src/vue/contentTools.ts | 30 +++++++--------- 16 files changed, 85 insertions(+), 113 deletions(-) diff --git a/api/src/api/PageData.ts b/api/src/api/PageData.ts index 791f80ae9..fdf2091e5 100644 --- a/api/src/api/PageData.ts +++ b/api/src/api/PageData.ts @@ -49,9 +49,7 @@ export interface PageData { */ canEdit: boolean; - // TODO: remove any - toObject(): any; // eslint-disable-line + toObject(): Record; - // TODO: remove any - fromObject(object: any): void; // eslint-disable-line + fromObject(object: Record): void; } diff --git a/api/src/api/WikiConfig.ts b/api/src/api/WikiConfig.ts index b9f7f3133..b9cb28f0a 100644 --- a/api/src/api/WikiConfig.ts +++ b/api/src/api/WikiConfig.ts @@ -48,9 +48,7 @@ export interface WikiConfig { offline: boolean, ): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - setConfigFromObject(configObject: any): void; + setConfigFromObject(configObject: Record): void; isSupported(format: string): boolean; diff --git a/api/src/api/document.ts b/api/src/api/document.ts index c0397a866..0a09f659c 100644 --- a/api/src/api/document.ts +++ b/api/src/api/document.ts @@ -31,18 +31,12 @@ export interface Document { setText(text: string): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - get(fieldName: string): any; + get(fieldName: string): unknown; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - set(fieldName: string, value: any): void; + set(fieldName: string, value: unknown): void; /* * Allows retrieving the source of the document */ - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getSource(): any; + getSource(): unknown; } diff --git a/api/src/api/logger.ts b/api/src/api/logger.ts index c954bb21e..59d7289da 100644 --- a/api/src/api/logger.ts +++ b/api/src/api/logger.ts @@ -23,19 +23,11 @@ export interface Logger { setModule(module: string): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - debug(...data: any[]): void; + debug(...data: unknown[]): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - info(...data: any[]): void; + info(...data: unknown[]): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - warn(...data: any[]): void; + warn(...data: unknown[]): void; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - error(...data: any[]): void; + error(...data: unknown[]): void; } diff --git a/api/src/components/DefaultPageData.ts b/api/src/components/DefaultPageData.ts index d58233d29..45a486fd2 100644 --- a/api/src/components/DefaultPageData.ts +++ b/api/src/components/DefaultPageData.ts @@ -57,9 +57,7 @@ export class DefaultPageData implements PageData { this.version = ""; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - toObject(): any { + toObject(): Record { return { id: this.id, name: this.name, @@ -73,17 +71,26 @@ export class DefaultPageData implements PageData { }; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - fromObject(object: any): void { - this.id = object.id; - this.name = object.name; - this.source = object.source; - this.syntax = object.syntax; - this.html = object.html; + fromObject(object: Record): void { this.document = new JSONLDDocument(object.document); - this.css = object.css; - this.js = object.js; - this.version = object.version; + + // TODO: validate object shape with a library + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.id = object.id as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.name = object.name as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.source = object.source as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.syntax = object.syntax as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.html = object.html as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.css = object.css as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.js = object.js as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.version = object.version as any; } } diff --git a/api/src/components/JSONLDDocument.ts b/api/src/components/JSONLDDocument.ts index bbc900abd..5b84a919b 100644 --- a/api/src/components/JSONLDDocument.ts +++ b/api/src/components/JSONLDDocument.ts @@ -20,14 +20,16 @@ import type { Document } from "../api/document"; +export type JsonLd = Record & { + identifier: string; + name: string; + text: string; +}; + export class JSONLDDocument implements Document { - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - protected jsonld: any; + protected jsonld: JsonLd; - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(jsonld: any) { + constructor(jsonld: JsonLd) { this.jsonld = jsonld; } @@ -55,21 +57,15 @@ export class JSONLDDocument implements Document { this.jsonld.text = text; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - get(fieldName: string): any { + get(fieldName: string): unknown { return this.jsonld[fieldName]; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - set(fieldName: string, value: any): void { + set(fieldName: string, value: unknown): void { this.jsonld[fieldName] = value; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getSource(): any { + getSource(): unknown { return this.jsonld; } } diff --git a/api/src/components/defaultLogger.ts b/api/src/components/defaultLogger.ts index 77a6070b3..31ffb0428 100644 --- a/api/src/components/defaultLogger.ts +++ b/api/src/components/defaultLogger.ts @@ -38,32 +38,24 @@ export class DefaultLogger implements Logger { this.module = module; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - debug(...data: any[]): void { + debug(...data: unknown[]): void { if (!this.loggerConfig || this.loggerConfig.hasLevelId(this.module, 4)) { data.unshift(this.module + ":"); } console.debug.apply(null, data); } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - info(...data: any[]): void { + info(...data: unknown[]): void { data.unshift(this.module + ":"); console.info.apply(null, data); } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - warn(...data: any[]): void { + warn(...data: unknown[]): void { data.unshift(this.module + ":"); console.warn.apply(null, data); } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - error(...data: any[]): void { + error(...data: unknown[]): void { data.unshift(this.module + ":"); console.error.apply(null, data); } diff --git a/api/src/components/defaultWikiConfig.ts b/api/src/components/defaultWikiConfig.ts index 02e5c4d6f..f7a0ee037 100644 --- a/api/src/components/defaultWikiConfig.ts +++ b/api/src/components/defaultWikiConfig.ts @@ -89,17 +89,25 @@ export class DefaultWikiConfig implements WikiConfig { this.offline = offline; } - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - setConfigFromObject(configObject: any): void { - this.name = configObject.name; - this.baseURL = configObject.baseURL; - this.baseRestURL = configObject.baseRestURL; - this.realtimeURL = configObject.realtimeURL; - this.homePage = configObject.homePage; - this.serverRendering = configObject.serverRendering; - this.offline = configObject.offline; - this.designSystem = configObject.designSystem; + setConfigFromObject(configObject: Record): void { + // TODO: validate object shape with a library + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.name = configObject.name as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.baseURL = configObject.baseURL as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.baseRestURL = configObject.baseRestURL as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.realtimeURL = configObject.realtimeURL as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.homePage = configObject.homePage as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.serverRendering = configObject.serverRendering as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.offline = configObject.offline as any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.designSystem = configObject.designSystem as any; } // TODO: reduce the number of statements in the following method and reactivate the disabled eslint rule. diff --git a/core/backends/backend-xwiki/src/xwikiStorage.ts b/core/backends/backend-xwiki/src/xwikiStorage.ts index 29ef7cf48..dd35e1be8 100644 --- a/core/backends/backend-xwiki/src/xwikiStorage.ts +++ b/core/backends/backend-xwiki/src/xwikiStorage.ts @@ -272,7 +272,7 @@ export class XWikiStorage extends AbstractStorage { try { // TODO get rid of any // eslint-disable-next-line @typescript-eslint/no-explicit-any - const fieldMapping: any = document.get("xwikiMapping")[fieldName]; + const fieldMapping = (document.get("xwikiMapping") as any)[fieldName]; let type = fieldMapping["type"]; let xwikiFieldName = fieldMapping["fieldName"]; if (type == null) { diff --git a/core/markdown/markdown-default/src/parseInternalImages.ts b/core/markdown/markdown-default/src/parseInternalImages.ts index 3646b4e32..4c80a5318 100644 --- a/core/markdown/markdown-default/src/parseInternalImages.ts +++ b/core/markdown/markdown-default/src/parseInternalImages.ts @@ -174,8 +174,7 @@ export function parseInternalImages( remoteURLSerializer: RemoteURLSerializer, ): MarkdownIt.Core.RuleCore { return function (state: StateCore): void { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - state.tokens.forEach((blockToken: any) => { + state.tokens.forEach((blockToken) => { if (blockToken.type == "inline") { handleInlineBlockToken( blockToken, diff --git a/core/markdown/markdown-default/src/parseInternalLinks.ts b/core/markdown/markdown-default/src/parseInternalLinks.ts index 49279b7fd..6c9f3cc10 100644 --- a/core/markdown/markdown-default/src/parseInternalLinks.ts +++ b/core/markdown/markdown-default/src/parseInternalLinks.ts @@ -197,8 +197,7 @@ export function parseInternalLinks( remoteURLSerializer: RemoteURLSerializer, ): MarkdownIt.Core.RuleCore { return function (state: StateCore): void { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - state.tokens.forEach((blockToken: any) => { + state.tokens.forEach((blockToken) => { if (blockToken.type == "inline") { handleInlineBlockToken( blockToken, diff --git a/ds/vuetify/src/vue/__tests__/utils/vuetify.ts b/ds/vuetify/src/vue/__tests__/utils/vuetify.ts index 83fdab01a..9b35fbb9a 100644 --- a/ds/vuetify/src/vue/__tests__/utils/vuetify.ts +++ b/ds/vuetify/src/vue/__tests__/utils/vuetify.ts @@ -32,8 +32,7 @@ const vuetify = createVuetify({ * Provide the required options for testing vuetify, and merge them with existing * @param options - the existing options to merge */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function addVuetifyOptions(options: any) { +export function addVuetifyOptions(options: Record) { return { ...options, global: { diff --git a/rendering/rendering/src/components/wikimodel-teavm.ts b/rendering/rendering/src/components/wikimodel-teavm.ts index 74d2eebe2..7fece75ee 100644 --- a/rendering/rendering/src/components/wikimodel-teavm.ts +++ b/rendering/rendering/src/components/wikimodel-teavm.ts @@ -28,9 +28,7 @@ export class WikiModel { public async isWikiModelLoaded(): Promise { console.debug("In isWikiModelLoaded"); - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const sleep = (ms: any) => new Promise((r) => setTimeout(r, ms)); + const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); for (let i = 0; i < 10; i++) { // @ts-expect-error TODO describe diff --git a/rendering/rendering/src/components/wikimodel.ts b/rendering/rendering/src/components/wikimodel.ts index 5c994297b..f7ef97796 100644 --- a/rendering/rendering/src/components/wikimodel.ts +++ b/rendering/rendering/src/components/wikimodel.ts @@ -44,9 +44,7 @@ export class WikiModel2 { } public async isWikiModelLoaded(): Promise { - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const sleep = (ms: any) => new Promise((r) => setTimeout(r, ms)); + const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); for (let i = 0; i < 10; i++) { // @ts-expect-error TODO describe diff --git a/sharedworker/impl/src/components/defaultQueueWorker.ts b/sharedworker/impl/src/components/defaultQueueWorker.ts index 2e856db2e..4d6588639 100644 --- a/sharedworker/impl/src/components/defaultQueueWorker.ts +++ b/sharedworker/impl/src/components/defaultQueueWorker.ts @@ -28,9 +28,7 @@ import type { MyWorker, QueueWorker } from "@xwiki/cristal-sharedworker-api"; @injectable() export default class DefaultQueueWorker implements QueueWorker { - // TODO remove use of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private workerInstance: any; + private workerInstance: Comlink.Remote | null = null; private cristalApp: CristalApp; private logger: Logger; diff --git a/skin/src/vue/contentTools.ts b/skin/src/vue/contentTools.ts index 193f8cd27..998b0a72c 100644 --- a/skin/src/vue/contentTools.ts +++ b/skin/src/vue/contentTools.ts @@ -107,20 +107,18 @@ export class ContentTools { const contentToInject = range.createContextualFragment(html); contentToInject .querySelectorAll("link[href], script[src]") - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .forEach(function (resource: any) { - url1 = resource.src || resource.href; - document.querySelectorAll("link[href], script[src]").forEach(function ( - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - resource2: any, - ) { - const url2 = resource2.src || resource2.href; - if (url1 && url1 == url2) { - return null; - } - }); + .forEach(function (resource) { + url1 = resource.getAttribute("src") ?? resource.getAttribute("ref"); + document + .querySelectorAll("link[href], script[src]") + .forEach(function (resource2) { + const url2 = + resource2.getAttribute("src") ?? resource2.getAttribute("href"); + + if (url1 && url1 == url2) { + return null; + } + }); }); return url1; } @@ -222,9 +220,7 @@ export class ContentTools { public static mount( component: Component, - // TODO get rid of any - // eslint-disable-next-line @typescript-eslint/no-explicit-any - props: any, + props: Record, children: unknown, element: HTMLElement, app: App, From 6d16c1b065730e52f0524efc6f1a3b27a7f43405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20E=2E?= Date: Thu, 20 Feb 2025 14:41:46 +0100 Subject: [PATCH 2/2] Improve method type --- api/src/api/WikiConfig.ts | 17 ++++++++++++-- api/src/components/defaultWikiConfig.ts | 30 +++++++++---------------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/api/src/api/WikiConfig.ts b/api/src/api/WikiConfig.ts index b9cb28f0a..03c0875f4 100644 --- a/api/src/api/WikiConfig.ts +++ b/api/src/api/WikiConfig.ts @@ -20,7 +20,18 @@ import type { Storage } from "./storage"; -export interface WikiConfig { +type ConfigObject = { + name: string; + baseURL: string; + baseRestURL: string; + realtimeURL: string; + homePage: string; + serverRendering: boolean; + offline: boolean; + designSystem: string; +}; + +interface WikiConfig { name: string; // The base url of the backend endpoint baseURL: string; @@ -48,7 +59,7 @@ export interface WikiConfig { offline: boolean, ): void; - setConfigFromObject(configObject: Record): void; + setConfigFromObject(configObject: ConfigObject): void; isSupported(format: string): boolean; @@ -76,3 +87,5 @@ export interface WikiConfig { */ getNewPageDefaultName(): string; } + +export type { ConfigObject, WikiConfig }; diff --git a/api/src/components/defaultWikiConfig.ts b/api/src/components/defaultWikiConfig.ts index f7a0ee037..26ded55cc 100644 --- a/api/src/components/defaultWikiConfig.ts +++ b/api/src/components/defaultWikiConfig.ts @@ -19,7 +19,7 @@ */ import { inject, injectable } from "inversify"; -import type { WikiConfig } from "../api/WikiConfig"; +import type { ConfigObject, WikiConfig } from "../api/WikiConfig"; import type { CristalApp } from "../api/cristalApp"; import type { Logger } from "../api/logger"; import type { Storage } from "../api/storage"; @@ -89,25 +89,15 @@ export class DefaultWikiConfig implements WikiConfig { this.offline = offline; } - setConfigFromObject(configObject: Record): void { - // TODO: validate object shape with a library - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.name = configObject.name as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.baseURL = configObject.baseURL as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.baseRestURL = configObject.baseRestURL as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.realtimeURL = configObject.realtimeURL as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.homePage = configObject.homePage as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.serverRendering = configObject.serverRendering as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.offline = configObject.offline as any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.designSystem = configObject.designSystem as any; + setConfigFromObject(configObject: ConfigObject): void { + this.name = configObject.name; + this.baseURL = configObject.baseURL; + this.baseRestURL = configObject.baseRestURL; + this.realtimeURL = configObject.realtimeURL; + this.homePage = configObject.homePage; + this.serverRendering = configObject.serverRendering; + this.offline = configObject.offline; + this.designSystem = configObject.designSystem; } // TODO: reduce the number of statements in the following method and reactivate the disabled eslint rule.