Continue ESLINT9 Migration (#13795)

Might already fix #13793
This commit is contained in:
Félix Malfait
2025-08-10 23:25:58 +02:00
committed by GitHub
parent df68cf98d4
commit 464a480043
2549 changed files with 6262 additions and 5481 deletions
@@ -307,7 +307,7 @@ export class ProcessNestedRelationsV2Helper {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
aggregate: Record<string, any>;
sourceFieldName: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}): Promise<{ relationResults: any[]; relationAggregatedFieldsResult: any }> {
if (ids.length === 0) {
@@ -53,7 +53,7 @@ export const encodeCursorData = (cursorData: CursorData) => {
};
export const getCursor = (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
args: FindManyResolverArgs<any, any>,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -24,7 +24,7 @@ export const handleCompositeKey = (
result[parsedFieldKey.parentFieldName][parsedFieldKey.childFieldName] = value;
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const parseResult = (obj: any): any => {
if (obj === null || typeof obj !== 'object' || typeof obj === 'function') {
@@ -15,10 +15,6 @@ export interface WorkspaceQueryHookOptions {
scope?: Scope;
}
export function WorkspaceQueryHook(key: WorkspaceQueryHookKey): ClassDecorator;
export function WorkspaceQueryHook(
options: WorkspaceQueryHookOptions,
): ClassDecorator;
export function WorkspaceQueryHook(
keyOrOptions: WorkspaceQueryHookKey | WorkspaceQueryHookOptions,
): ClassDecorator {
@@ -32,7 +28,7 @@ export function WorkspaceQueryHook(
options.type = WorkspaceQueryHookType.PRE_HOOK;
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
return (target: Function) => {
SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
SetMetadata(WORKSPACE_QUERY_HOOK_METADATA, options)(target);
@@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
import { Injectable, type Type } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
@@ -8,8 +8,8 @@ import {
import { type workspaceResolverBuilderMethodNames } from 'src/engine/api/graphql/workspace-resolver-builder/factories/factories';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type Resolver<Args = any> = GraphQLFieldResolver<any, any, Args>;
@@ -44,10 +44,10 @@ export class CompositeObjectTypeDefinitionFactory {
compositeType: CompositeType,
kind: ObjectTypeDefinitionKind,
options: WorkspaceBuildSchemaOptions,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
): GraphQLFieldConfigMap<any, any> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const fields: GraphQLFieldConfigMap<any, any> = {};
@@ -42,10 +42,10 @@ export class EdgeTypeDefinitionFactory {
private generateFields(
objectMetadata: ObjectMetadataEntity,
options: WorkspaceBuildSchemaOptions,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
): GraphQLFieldConfigMap<any, any> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const fields: GraphQLFieldConfigMap<any, any> = {};
@@ -22,7 +22,7 @@ import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-membe
import { isWorkDomain } from 'src/utils/is-work-email';
@Injectable()
// eslint-disable-next-line @nx/workspace-inject-workspace-repository
export class ApprovedAccessDomainService {
constructor(
@InjectRepository(ApprovedAccessDomainEntity, 'core')
@@ -8,7 +8,7 @@ import { AuthProviderEnum } from 'src/engine/core-modules/workspace/types/worksp
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
@Injectable()
// eslint-disable-next-line @nx/workspace-inject-workspace-repository
export class AuthSsoService {
constructor(
@InjectRepository(Workspace, 'core')
@@ -14,7 +14,7 @@ export class GoogleAPIsOauthRequestCodeStrategy extends GoogleAPIsOauthCommonStr
super(twentyConfigService);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
authenticate(req: any, options: any) {
options = {
@@ -9,7 +9,7 @@ export class MicrosoftAPIsOauthRequestCodeStrategy extends MicrosoftAPIsOauthCom
super(twentyConfigService);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
authenticate(req: any, options: any) {
options = {
@@ -1,4 +1,4 @@
/* eslint-disable no-restricted-imports */
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@@ -27,7 +27,7 @@ import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twent
import { UserService } from 'src/engine/core-modules/user/services/user.service';
@Injectable()
// eslint-disable-next-line @nx/workspace-inject-workspace-repository
export class EmailVerificationService {
constructor(
@InjectRepository(AppToken, 'core')
@@ -31,7 +31,7 @@ export const objectRecordChangedValues = (
return acc;
},
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
{} as Record<string, { before: any; after: any }>,
);
@@ -1,4 +1,4 @@
/* eslint-disable no-restricted-imports */
import { Module } from '@nestjs/common';
import { JwtModule as NestJwtModule } from '@nestjs/jwt';
@@ -8,7 +8,7 @@ import {
} from 'src/engine/core-modules/key-value-pair/key-value-pair.entity';
export class KeyValuePairService<
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
KeyValueTypesMap extends Record<string, any> = Record<string, any>,
> {
@@ -11,13 +11,13 @@ import { LOGGER_DRIVER } from 'src/engine/core-modules/logger/logger.constants';
export class LoggerService implements LoggerServiceInterface {
constructor(@Inject(LOGGER_DRIVER) private driver: LoggerServiceInterface) {}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
log(message: any, category: string, ...optionalParams: any[]) {
this.driver.log.apply(this.driver, [message, category, ...optionalParams]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error(message: any, category: string, ...optionalParams: any[]) {
this.driver.error.apply(this.driver, [
@@ -27,13 +27,13 @@ export class LoggerService implements LoggerServiceInterface {
]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
warn(message: any, category: string, ...optionalParams: any[]) {
this.driver.warn.apply(this.driver, [message, category, ...optionalParams]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
debug?(message: any, category: string, ...optionalParams: any[]) {
this.driver.debug?.apply(this.driver, [
@@ -43,7 +43,7 @@ export class LoggerService implements LoggerServiceInterface {
]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
verbose?(message: any, category: string, ...optionalParams: any[]) {
this.driver.verbose?.apply(this.driver, [
@@ -17,18 +17,10 @@ export interface MessageQueueProcessorOptions {
scope?: Scope;
}
/**
* Represents a worker that is able to process jobs from the queue.
* @param queueName name of the queue to process
*/
export function Processor(queueName: MessageQueue): ClassDecorator;
/**
* Represents a worker that is able to process jobs from the queue.
* @param processorOptions processor options
*/
export function Processor(
processorOptions: MessageQueueProcessorOptions,
): ClassDecorator;
export function Processor(
queueNameOrOptions: string | MessageQueueProcessorOptions,
): ClassDecorator {
@@ -37,7 +29,7 @@ export function Processor(
? queueNameOrOptions
: { queueName: queueNameOrOptions };
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
return (target: Function) => {
SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
SetMetadata(PROCESSOR_METADATA, options)(target);
@@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
import { Injectable, type Type } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
@@ -5,7 +5,7 @@ import {
} from 'class-validator';
export const AssertOrWarn = (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
condition: (object: any, value: any) => boolean,
validationOptions?: ValidationOptions,
@@ -1,4 +1,4 @@
/* eslint-disable @nx/workspace-inject-workspace-repository */
import { InjectRepository } from '@nestjs/typeorm';
import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
@@ -6,7 +6,7 @@ import { mergeUserVars } from 'src/engine/core-modules/user/user-vars/utils/merg
@Injectable()
export class UserVarsService<
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
KeyValueTypesMap extends Record<string, any> = Record<string, any>,
> {
@@ -1,4 +1,4 @@
/* eslint-disable no-restricted-imports */
import { Module } from '@nestjs/common';
import { KeyValuePairModule } from 'src/engine/core-modules/key-value-pair/key-value-pair.module';
@@ -1,4 +1,4 @@
/* eslint-disable no-restricted-imports */
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@@ -34,7 +34,7 @@ import { type Workspace } from 'src/engine/core-modules/workspace/workspace.enti
import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
@Injectable()
// eslint-disable-next-line @nx/workspace-inject-workspace-repository
export class WorkspaceInvitationService {
constructor(
@InjectRepository(AppToken, 'core')
@@ -85,7 +85,7 @@ type RelationFieldMetadata = FieldMetadataEntity<FieldMetadataType.RELATION>;
type MorphRelationFieldMetadata =
FieldMetadataEntity<FieldMetadataType.MORPH_RELATION>;
// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars
// eslint-disable-next-line unused-imports/no-unused-vars
type RelationAssertions = [
Expect<HasAllProperties<UUIDFieldMetadata, NotDefinedRelationRecord>>,
Expect<HasAllProperties<TextFieldMetadata, NotDefinedRelationRecord>>,
@@ -122,7 +122,7 @@ type NotDefinedSettings = {
settings: never | null;
};
// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars
// eslint-disable-next-line unused-imports/no-unused-vars
type SettingsAssertions = [
Expect<HasAllProperties<CurrencyFieldMetadata, NotDefinedSettings>>,
Expect<HasAllProperties<FullNameFieldMetadata, NotDefinedSettings>>,
@@ -186,7 +186,7 @@ type SettingsAssertions = [
>,
];
// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars
// eslint-disable-next-line unused-imports/no-unused-vars
type DefaultValueAssertions = [
Expect<
HasAllProperties<
@@ -354,7 +354,7 @@ type NotDefinedOptions = {
options: never | null;
};
// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars
// eslint-disable-next-line unused-imports/no-unused-vars
type OptionsAssertions = [
Expect<
HasAllProperties<
@@ -78,7 +78,7 @@ describe('validateDefaultValueForType', () => {
it('should return false for invalid CURRENCY default value', () => {
expect(
validateDefaultValueForType(
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error Just for testing purposes
{ amountMicros: 100, currencyCode: "'USD'" },
FieldMetadataType.CURRENCY,
@@ -17,14 +17,6 @@ export type FieldTypeAndNameMetadata = {
type: FieldMetadataType;
};
export function computeColumnName(
fieldName: string,
options?: ComputeColumnNameOptions,
): string;
export function computeColumnName<T extends FieldMetadataType>(
fieldMetadata: FieldMetadataEntity<T>,
options?: ComputeColumnNameOptions,
): string;
// TODO: If we need to implement custom name logic for columns, we can do it here
export function computeColumnName<T extends FieldMetadataType>(
fieldMetadataOrFieldName: FieldMetadataEntity<T> | string,
@@ -47,14 +39,6 @@ export function computeColumnName<T extends FieldMetadataType>(
return generateName(fieldMetadataOrFieldName.name);
}
export function computeCompositeColumnName(
fieldName: string,
compositeProperty: CompositeProperty,
): string;
export function computeCompositeColumnName<T extends FieldMetadataType>(
fieldMetadata: FieldTypeAndNameMetadata | FieldMetadataEntity<T>,
compositeProperty: CompositeProperty,
): string;
export function computeCompositeColumnName<T extends FieldMetadataType>(
fieldMetadataOrFieldName:
| FieldTypeAndNameMetadata
@@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Logger } from '@nestjs/common';
import { type FieldMetadataType } from 'twenty-shared/types';
@@ -44,7 +44,7 @@ export interface WorkspaceDynamicRelationMetadataArgs {
/**
* Class to which relation is applied.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -13,7 +13,7 @@ export interface WorkspaceEntityMetadataArgs {
* Function target is a table defined in the class.
* String target is a table defined in a json schema.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -6,7 +6,7 @@ export interface WorkspaceExtendedEntityMetadataArgs {
* Function target is a table defined in the class.
* String target is a table defined in a json schema.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -16,7 +16,7 @@ export interface WorkspaceFieldMetadataArgs {
/**
* Class to which field is applied.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -6,7 +6,7 @@ export interface WorkspaceIndexMetadataArgs {
/**
* Class to which index is applied.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/*
@@ -2,7 +2,7 @@ export interface WorkspaceJoinColumnsMetadataArgs {
/**
* Class to which relation is applied.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -15,7 +15,7 @@ export interface WorkspaceRelationMetadataArgs {
/**
* Class to which relation is applied.
*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
readonly target: Function;
/**
@@ -347,7 +347,7 @@ export class PgPoolSharedService {
function SharedPool(this: Pool, config?: PoolConfig): Pool {
// When called as a function (without new), make sure to return a new instance
if (!(this instanceof SharedPool)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error We know this works at runtime
return new SharedPool(config);
}
@@ -1,4 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
import { type WorkspaceDynamicRelationMetadataArgs } from 'src/engine/twenty-orm/interfaces/workspace-dynamic-relation-metadata-args.interface';
import { type WorkspaceEntityMetadataArgs } from 'src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface';
@@ -77,7 +77,7 @@ export class WorkspaceFixService {
manager: EntityManager,
objectMetadataCollection: ObjectMetadataEntity[],
type: WorkspaceHealthFixKind,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
issues: WorkspaceHealthIssue[],
): Promise<CompareEntity<unknown>[]> {
switch (type) {
@@ -40,7 +40,7 @@ describe('transformMetadataForComparison', () => {
});
expect(result).toHaveProperty('key-123');
expect(result['key-123']).toEqual({ id: 123, name: 'Test' });
expect((result as Record<string, any>)['key-123']).toEqual({ id: 123, name: 'Test' });
});
// Test with an empty array
@@ -1,7 +1,3 @@
export function orderObjectProperties<T extends object>(data: T[]): T[];
export function orderObjectProperties<T extends object>(data: T): T;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function orderObjectProperties<T extends Array<any> | object>(
data: T,
@@ -4,25 +4,6 @@ type TransformToString<T, Keys extends keyof T> = {
[P in keyof T]: P extends Keys ? string : T[P];
};
// Overload for an array of T
export function transformMetadataForComparison<T, Keys extends keyof T>(
fieldMetadataCollection: T[],
options: {
shouldIgnoreProperty?: (property: string, originalMetadata?: T) => boolean;
propertiesToStringify?: readonly Keys[];
keyFactory: (datum: T) => string;
},
): Record<string, TransformToString<T, Keys>>;
// Overload for a single T object
export function transformMetadataForComparison<T, Keys extends keyof T>(
fieldMetadataCollection: T,
options: {
shouldIgnoreProperty?: (property: string, originalMetadata?: T) => boolean;
propertiesToStringify?: readonly Keys[];
},
): TransformToString<T, Keys>;
export function transformMetadataForComparison<T, Keys extends keyof T>(
metadata: T[] | T,
options: {
@@ -1,7 +1,5 @@
import { createHash } from 'crypto';
export function createDeterministicUuid(uuid: string): string;
export function createDeterministicUuid(uuids: string[]): string;
export function createDeterministicUuid(
uuidOrUuids: string[] | string,