1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-23 22:36:32 +02:00

Tools: Implement @typescript-eslint/no-explicit-any rule

This commit is contained in:
Laurent Cozic
2024-04-05 12:16:49 +01:00
parent 42900bcc66
commit 2e2a2b3193
654 changed files with 2971 additions and 170 deletions

View File

@@ -60,6 +60,7 @@ class BaseModel {
// TODO: This ancient part of Joplin about model types is a bit of a
// mess and should be refactored properly.
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static typeEnum_: any[] = [
['TYPE_NOTE', ModelType.Note],
['TYPE_FOLDER', ModelType.Folder],
@@ -98,6 +99,7 @@ class BaseModel {
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
public static dispatch: Function = function() {};
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
private static saveMutexes_: any = {};
private static db_: JoplinDatabase;
@@ -110,10 +112,12 @@ class BaseModel {
throw new Error('Must be overriden');
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static setDb(db: any) {
this.db_ = db;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static addModelMd(model: any): any {
if (!model) return model;
@@ -138,6 +142,7 @@ class BaseModel {
return false;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static byId(items: any[], id: string) {
for (let i = 0; i < items.length; i++) {
if (items[i].id === id) return items[i];
@@ -146,6 +151,7 @@ class BaseModel {
}
public static defaultValues(fieldNames: string[]) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const output: any = {};
for (const n of fieldNames) {
output[n] = this.db().fieldDefaultValue(this.tableName(), n);
@@ -153,6 +159,7 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static modelIndexById(items: any[], id: string) {
for (let i = 0; i < items.length; i++) {
if (items[i].id === id) return i;
@@ -160,6 +167,7 @@ class BaseModel {
return -1;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static modelsByIds(items: any[], ids: string[]) {
const output = [];
for (let i = 0; i < items.length; i++) {
@@ -214,6 +222,7 @@ class BaseModel {
return temp;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static fieldType(name: string, defaultValue: any = null) {
const fields = this.fields();
for (let i = 0; i < fields.length; i++) {
@@ -227,7 +236,9 @@ class BaseModel {
return this.db().tableFields(this.tableName());
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static removeUnknownFields(model: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const newModel: any = {};
for (const n in model) {
if (!model.hasOwnProperty(n)) continue;
@@ -239,6 +250,7 @@ class BaseModel {
public static new() {
const fields = this.fields();
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const output: any = {};
for (let i = 0; i < fields.length; i++) {
const f = fields[i];
@@ -247,6 +259,7 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static modOptions(options: any) {
if (!options) {
options = {};
@@ -259,13 +272,14 @@ class BaseModel {
return options;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static count(options: any = null) {
if (!options) options = {};
let sql = `SELECT count(*) as total FROM \`${this.tableName()}\``;
if (options.where) sql += ` WHERE ${options.where}`;
return this.db()
.selectOne(sql)
// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied
// eslint-disable-next-line promise/prefer-await-to-then, @typescript-eslint/no-explicit-any -- Old code before rule was applied, Old code before rule was applied
.then((r: any) => {
return r ? r['total'] : 0;
});
@@ -283,12 +297,14 @@ class BaseModel {
return this.modelSelectAll(`SELECT * FROM \`${this.tableName()}\` WHERE \`id\` LIKE ?`, [`${partialId}%`]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static applySqlOptions(options: LoadOptions, sql: string, params: any[] = null) {
if (!options) options = {};
if (options.order && options.order.length) {
sql += ` ORDER BY ${paginationToSql({
limit: options.limit,
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
order: options.order as any,
page: 1,
caseInsensitive: options.caseInsensitive,
@@ -300,9 +316,11 @@ class BaseModel {
return { sql: sql, params: params };
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static async allIds(options: any = null) {
const q = this.applySqlOptions(options, `SELECT id FROM \`${this.tableName()}\``);
const rows = await this.db().selectAll(q.sql, q.params);
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
return rows.map((r: any) => r.id);
}
@@ -311,6 +329,7 @@ class BaseModel {
if (!options.fields) options.fields = '*';
let sql = `SELECT ${this.db().escapeFields(options.fields)} FROM \`${this.tableName()}\``;
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
let params: any[] = [];
if (options.where) {
sql += ` WHERE ${options.where}`;
@@ -332,6 +351,7 @@ class BaseModel {
return this.modelSelectAll(q.sql);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static async search(options: any = null) {
if (!options) options = {};
if (!options.fields) options.fields = '*';
@@ -354,6 +374,7 @@ class BaseModel {
return this.modelSelectAll(query.sql, query.params);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static async modelSelectOne(sqlOrSqlQuery: string | SqlQuery, params: any[] = null) {
if (params === null) params = [];
let sql = '';
@@ -374,6 +395,7 @@ class BaseModel {
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static async modelSelectAll<T = any>(sqlOrSqlQuery: string | SqlQuery, params: any[] = null): Promise<T[]> {
if (params === null) params = [];
let sql = '';
@@ -399,6 +421,7 @@ class BaseModel {
return this.db().escapeFieldsToString(options.fields);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static loadByField(fieldName: string, fieldValue: any, options: LoadOptions = null) {
if (!options) options = {};
if (!('caseInsensitive' in options)) options.caseInsensitive = false;
@@ -408,6 +431,7 @@ class BaseModel {
return this.modelSelectOne(sql, [fieldValue]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static loadByFields(fields: any, options: LoadOptions = null) {
if (!options) options = {};
if (!('caseInsensitive' in options)) options.caseInsensitive = false;
@@ -423,11 +447,14 @@ class BaseModel {
return this.modelSelectOne(sql, params);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static loadByTitle(fieldValue: any) {
return this.modelSelectOne(`SELECT * FROM \`${this.tableName()}\` WHERE \`title\` = ?`, [fieldValue]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static diffObjects(oldModel: any, newModel: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const output: any = {};
const fields = this.diffObjectsFields(oldModel, newModel);
for (let i = 0; i < fields.length; i++) {
@@ -437,6 +464,7 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static diffObjectsFields(oldModel: any, newModel: any) {
const output = [];
for (const n in newModel) {
@@ -449,14 +477,17 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static modelsAreSame(oldModel: any, newModel: any) {
const diff = this.diffObjects(oldModel, newModel);
delete diff.type_;
return !Object.getOwnPropertyNames(diff).length;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static saveMutex(modelOrId: any) {
const noLockMutex = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
acquire: function(): any {
return null;
},
@@ -476,7 +507,7 @@ class BaseModel {
return mutex;
}
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any -- Old code before rule was applied, Old code before rule was applied
public static releaseSaveMutex(modelOrId: any, release: Function) {
if (!release) return;
if (!modelOrId) return release();
@@ -492,7 +523,9 @@ class BaseModel {
release();
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static saveQuery(o: any, options: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
let temp: any = {};
const fieldNames = this.fieldNames();
for (let i = 0; i < fieldNames.length; i++) {
@@ -505,6 +538,7 @@ class BaseModel {
// be part of the final list of fields if autoTimestamp is on.
// id also will stay.
if (!options.isNew && options.fields) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const filtered: any = {};
for (const k in temp) {
if (!temp.hasOwnProperty(k)) continue;
@@ -517,6 +551,7 @@ class BaseModel {
o = temp;
let modelId = temp.id;
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
let query: any = {};
const timeNow = time.unixMs();
@@ -569,6 +604,7 @@ class BaseModel {
return query;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static userSideValidation(o: any) {
if (o.id && !o.id.match(/^[a-f0-9]{32}$/)) {
throw new Error('Validation error: ID must a 32-characters lowercase hexadecimal string');
@@ -580,6 +616,7 @@ class BaseModel {
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static async save(o: any, options: SaveOptions = null) {
// When saving, there's a mutex per model ID. This is because the model returned from this function
// is basically its input `o` (instead of being read from the database, for performance reasons).
@@ -651,6 +688,7 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static isNew(object: any, options: any) {
if (options && 'isNew' in options) {
// options.isNew can be "auto" too
@@ -661,6 +699,7 @@ class BaseModel {
return !object.id;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static filterArray(models: any[]) {
const output = [];
for (let i = 0; i < models.length; i++) {
@@ -669,6 +708,7 @@ class BaseModel {
return output;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static filter(model: any) {
if (!model) return model;
@@ -721,6 +761,7 @@ class BaseModel {
for (let i = 0; i < BaseModel.typeEnum_.length; i++) {
const e = BaseModel.typeEnum_[i];
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
(BaseModel as any)[e[0]] = e[1];
}