diff --git a/.eslintrc.js b/.eslintrc.js index 9d68cf3abd23e188c8e6ce7686ef59070cd408d9..8a4f5246f5034f96f455c4bc9a6c6d92d109d269 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -11,10 +11,10 @@ module.exports = { { extends: [ 'plugin:jsdoc/recommended', + // Functional rule configurations, for best best practices and code correctness 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/eslint-recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin - // This enables a lot of type checking - // 'plugin:@typescript-eslint/recommended-requiring-type-checking', // Uses the recommended rules from @typescript-eslint/eslint-plugin + // Stylistic rule configurations, for consistent and predictable syntax usage + 'plugin:@typescript-eslint/stylistic-type-checked', ], files: ['**/*.{ts,tsx}'], parserOptions: { @@ -31,6 +31,12 @@ module.exports = { '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-unnecessary-type-assertion': 'error', + // causes a build error and has a lot of effects on components + '@typescript-eslint/prefer-nullish-coalescing': 'off', + + // better readability by naming keys + '@typescript-eslint/consistent-indexed-object-style': 'off', + // JSDOC extends overrides: disable some of extends rules // JSdoc is not always needed 'jsdoc/require-jsdoc': 0, diff --git a/package.json b/package.json index c685d1ec238a16a6a132dbefb6f6e460be3a941d..f4ed2e00fc215d71653073bf6b65eea86bb48382 100644 --- a/package.json +++ b/package.json @@ -99,8 +99,8 @@ "@types/react-dom": "^18.2.11", "@types/react-lottie": "^1.2.3", "@types/redux-mock-store": "^1.0.2", - "@typescript-eslint/eslint-plugin": "^5.56.0", - "@typescript-eslint/parser": "^5.56.0", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", "axios": "^1.3.0", "babel-polyfill": "^6.26.0", "babel-preset-cozy-app": "2.1.0", diff --git a/src/migrations/migration.type.ts b/src/migrations/migration.type.ts index e4b7a93c41f4cc840d720efd63179e1c8abace36..c168aeb842885ca9d3c248cb876d6e8d7b90d560 100644 --- a/src/migrations/migration.type.ts +++ b/src/migrations/migration.type.ts @@ -3,7 +3,7 @@ import { Notes } from 'models' type SchemaVersion = number -export type MigrationData = { +export interface MigrationData { errors: any[] } export interface MigrationNoop extends MigrationData { @@ -21,7 +21,7 @@ export type MigrationResult = | MigrationComplete | MigrationFailed -export type Migration = { +export interface Migration { baseSchemaVersion: SchemaVersion targetSchemaVersion: SchemaVersion description: string @@ -36,7 +36,7 @@ export type Migration = { run: (_client: Client, docs: any[]) => Promise<any[]> } -export type MigrationQueryOptions = { +export interface MigrationQueryOptions { scope: string tag: string limit: number diff --git a/src/services/challenge.service.ts b/src/services/challenge.service.ts index 9a12620f77cdaf7694d3c6a75921647f212d62a7..db2fa38168310d569d11c3ba2c1b46b5d3d37ee1 100644 --- a/src/services/challenge.service.ts +++ b/src/services/challenge.service.ts @@ -569,7 +569,7 @@ export default class ChallengeService { userChallenge: UserChallenge, flag: UserChallengeUpdateFlag, quizWithUpdatedQuestions?: UserQuiz, - fluidStatus?: Array<FluidStatus>, + fluidStatus?: FluidStatus[], action?: Ecogesture ): Promise<UserChallenge> { let updatedUserChallenge: UserChallenge diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts index 961cafd47cb1c8ef4b21049eecfa30ac34580d13..5875fa76455c098a7c078724b754444c42a9c44a 100644 --- a/src/services/consumption.service.ts +++ b/src/services/consumption.service.ts @@ -406,11 +406,10 @@ export default class ConsumptionDataManager { let firstDay = null const firstDays = [] for (const fluidType of fluidTypes) { - firstDay = - (await this._queryRunnerService.getFirstDateData( - fluidType, - timeStep - )) || null + firstDay = await this._queryRunnerService.getFirstDateData( + fluidType, + timeStep + ) firstDays.push(firstDay) } return firstDays @@ -423,19 +422,17 @@ export default class ConsumptionDataManager { let lastDay = null const lastDays = [] if (fluidTypes.length === 1) { - lastDay = - (await this._queryRunnerService.getLastDateData( - fluidTypes[0], - timeStep - )) || null + lastDay = await this._queryRunnerService.getLastDateData( + fluidTypes[0], + timeStep + ) lastDays.push(lastDay) } else if (fluidTypes.length > 1) { for (const fluidType of fluidTypes) { - lastDay = - (await this._queryRunnerService.getLastDateData( - fluidType, - timeStep - )) || null + lastDay = await this._queryRunnerService.getLastDateData( + fluidType, + timeStep + ) lastDays.push(lastDay) } } diff --git a/src/services/dateChart.service.ts b/src/services/dateChart.service.ts index 1a5ac296b4322b29a324126e36d9f6a043a68256..47d5266cbc0ad09bc1d126738db037018322add9 100644 --- a/src/services/dateChart.service.ts +++ b/src/services/dateChart.service.ts @@ -1,6 +1,6 @@ import { FluidType, TimeStep } from 'enums' import { DateTime, Interval } from 'luxon' -import { FluidConfig, TimePeriod } from 'models' +import { TimePeriod } from 'models' import ConfigService from './fluidConfig.service' export default class DateChartService { @@ -294,8 +294,7 @@ export default class DateChartService { fluidType: FluidType ): number | null { if (date && fluidType !== FluidType.MULTIFLUID) { - const fluidConfig: Array<FluidConfig> = - new ConfigService().getFluidConfig() + const fluidConfig = new ConfigService().getFluidConfig() const today = DateTime.local().setZone('utc', { keepLocalTime: true, }) diff --git a/src/services/duel.service.ts b/src/services/duel.service.ts index 1baa8a8cc48223e60d66def3f7075766c49df213..9b39dec44b10f5fbdc7b2403faee9c7269695fe3 100644 --- a/src/services/duel.service.ts +++ b/src/services/duel.service.ts @@ -178,12 +178,11 @@ export default class DuelService { */ public async updateUserDuelThreshold( userDuel: UserDuel, - fluidStatus: Array<FluidStatus> = [] + fluidStatus: FluidStatus[] = [] ): Promise<UserDuel> { const consumptionService = new ConsumptionService(this._client) const performanceService = new PerformanceService() - const fluidTypes: Array<FluidType> = - this.getFluidTypesFromStatus(fluidStatus) + const fluidTypes = this.getFluidTypesFromStatus(fluidStatus) // Get last period with all days known const period: TimePeriod | false = await this.getValidPeriod( fluidStatus, @@ -192,7 +191,7 @@ export default class DuelService { ) if (period !== false) { // Fetch performance data - const fetchLastValidData: Array<PerformanceIndicator> = + const fetchLastValidData: PerformanceIndicator[] = await consumptionService.getPerformanceIndicators( period, TimeStep.DAY, diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts index 9db717ad0f46af83e0036f8ff53550e5739a4a21..3ef1c9ba9d53223c16bdc483b5eaeaa3c432c81a 100644 --- a/src/services/initialization.service.ts +++ b/src/services/initialization.service.ts @@ -161,7 +161,7 @@ export default class InitializationService { }) const { data: [trigger], - }: QueryResult<Array<Trigger>> = await this._client.query(triggerQuery) + }: QueryResult<Trigger[]> = await this._client.query(triggerQuery) if (trigger?._id) { this._client .getStackClient() diff --git a/src/services/permissions.service.ts b/src/services/permissions.service.ts index a16f3f371e597a7a496c27ae0cc7adf1b863662c..78a8b7639bcc355789bd514a5b561b6315044d49 100644 --- a/src/services/permissions.service.ts +++ b/src/services/permissions.service.ts @@ -5,7 +5,7 @@ import { PERMISSIONS_DOCTYPE } from 'doctypes/io-cozy-permissions' const logStack = logger.namespace('challengeService') -type PermissionsResponse = { +interface PermissionsResponse { attributes: { type: string source_id: string diff --git a/src/services/profileType.service.ts b/src/services/profileType.service.ts index 5ab1225416d50d2681a88133fe05a5bc197e559a..d23b445e642ac9745b4ba7520b4c2660d4d6145d 100644 --- a/src/services/profileType.service.ts +++ b/src/services/profileType.service.ts @@ -152,13 +152,12 @@ export default class ProfileTypeService { heating !== IndividualOrCollective.COLLECTIVE ) { correctionFacilities = - heatingData.adjustment_facilities['individual_heater_and_ventilation'] + heatingData.adjustment_facilities.individual_heater_and_ventilation } else if (hasReplacedHeater === ThreeChoicesAnswer.YES) { - correctionFacilities = - heatingData.adjustment_facilities['individual_heater'] + correctionFacilities = heatingData.adjustment_facilities.individual_heater } else if (hasInstalledVentilation === ThreeChoicesAnswer.YES) { correctionFacilities = - heatingData.adjustment_facilities['individual_ventilation'] + heatingData.adjustment_facilities.individual_ventilation } else { correctionFacilities = 0 } diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts index 39041690fb5f97956e28f2b14d0ca8ab21ca0a01..441f4a27a6dbc261c6312ffaca3078597bcfe3b1 100644 --- a/src/services/queryRunner.service.ts +++ b/src/services/queryRunner.service.ts @@ -287,7 +287,7 @@ export default class QueryRunner { } return ( doctypeMappings[fluidType]?.[timeStep] || - doctypeMappings[fluidType]?.['default'] || + doctypeMappings[fluidType]?.default || 'default' ) } diff --git a/src/services/quiz.service.ts b/src/services/quiz.service.ts index d4ab41d504a1aaafebe4bb092019563901ed0c5d..c3341bc63fd78de7976f1fc54e347bebe00248e4 100644 --- a/src/services/quiz.service.ts +++ b/src/services/quiz.service.ts @@ -314,7 +314,7 @@ export default class QuizService { fluidTypes: useFluidTypes, isHome: !customQuestionEntity.singleFluid, }) - maxLoad = maxLoad === null ? 0 : maxLoad + maxLoad = maxLoad ?? 0 answers = this.getAnswersForNumberValue(maxLoad as number, unit) } else { // average diff --git a/src/targets/services/fluidsPrices.ts b/src/targets/services/fluidsPrices.ts index 2deb27c1410a08ea438dfd6a906939bc1a16fb52..48898f8fa039ddfc1c1bcdac5a7ac3b8392a31d4 100644 --- a/src/targets/services/fluidsPrices.ts +++ b/src/targets/services/fluidsPrices.ts @@ -288,7 +288,7 @@ const applyPrices = async (client: Client, fluidType: FluidType) => { ) // If lastItem has a price, skip this day (in order to save perf) - const lastItem = data?.data && data.data[data.data.length - 1] + const lastItem = data?.data?.[data.data.length - 1] if (lastItem && priceData) { // if a price has been updated in backoffice re-calculates all price from the firstEditedPriceDate data?.data.forEach((element: DataloadEntity) => { diff --git a/src/types/cozy-bar.d.ts b/src/types/cozy-bar.d.ts index 3eb901e7289677953ae19ac5c6e46180084e538c..d618f5a985178ebda998fe44e9d9636b50274e2d 100644 --- a/src/types/cozy-bar.d.ts +++ b/src/types/cozy-bar.d.ts @@ -2,7 +2,7 @@ import { ReactComponentElement } from 'react' /* eslint-disable @typescript-eslint/no-explicit-any */ declare module 'cozy-bar' { - type TcozyBarInitOpts = { + interface TcozyBarInitOpts { appName: string appNamePrefix: string appSlug?: string diff --git a/src/types/cozy-client.d.ts b/src/types/cozy-client.d.ts index 8a7d20f28601fcd335b7b332c50fbed2fe9c0795..0e1f45fd6353a22c4e192bcb112dd9be4ad45707 100644 --- a/src/types/cozy-client.d.ts +++ b/src/types/cozy-client.d.ts @@ -15,28 +15,30 @@ declare module 'cozy-client' { export function useClient(): Client export function Q(doctype: TDoctype): QueryDefinition - export type SortOptions = { [field: string]: 'asc' | 'desc' } - export type QueryDefinition = { + export interface SortOptions { + [field: string]: 'asc' | 'desc' + } + export interface QueryDefinition { checkSortOrder(opts: { sort: SortOptions selector: unknown indexedFields: unknown }): QueryDefinition getById(id: string): QueryDefinition - getByIds(ids: Array<string>): QueryDefinition - include(relations: Array<string>): QueryDefinition - indexFields(indexedFields: Array<string>): QueryDefinition + getByIds(ids: string[]): QueryDefinition + include(relations: string[]): QueryDefinition + indexFields(indexedFields: string[]): QueryDefinition partialIndex(partialFilter: object): QueryDefinition limitBy(limit: number): QueryDefinition offset(skip: number): QueryDefinition offsetBookmark(bookmark: string): QueryDefinition offsetCursor(cursor): QueryDefinition referencedBy(document: unknown): QueryDefinition - select(field: Array<string> | undefined): QueryDefinition - sortBy(sort: Array<SortOptions>): QueryDefinition + select(field: string[] | undefined): QueryDefinition + sortBy(sort: SortOptions[]): QueryDefinition where(selector: MongoSelector): QueryDefinition } - export type QueryResult<T, I = undefined> = { + export interface QueryResult<T, I = undefined> { bookmark: string next: boolean meta?: { count: number } @@ -56,7 +58,7 @@ declare module 'cozy-client' { } export interface FindQueryOptions { bookmark?: string - fields?: Array<string> + fields?: string[] indexId?: string limit?: number skip?: number @@ -297,10 +299,7 @@ declare module 'cozy-client' { * @param {Array<Document>} documents - Documents to be hydrated * @returns {Array<HydratedDocument>} */ - hydrateDocuments<D>( - doctype: TDoctype, - documents: Array<D> - ): Array<HydratedDocument> + hydrateDocuments<D>(doctype: TDoctype, documents: D[]): HydratedDocument[] /** * Resolves relationships on a document. @@ -317,9 +316,7 @@ declare module 'cozy-client' { class CCozyClient { constructor(n: unknown): Client } - const CozyClient: { - new (n: unknown): Client - } = CCozyClient + const CozyClient: new (n: unknown) => Client = CCozyClient export default CozyClient export type HydratedDoc = any diff --git a/src/utils/math.spec.ts b/src/utils/math.spec.ts index 49e6737cb9eb01790689d293d682c8e45624f8af..e761efc03780ecebc762edbc2c474db3618d06cd 100644 --- a/src/utils/math.spec.ts +++ b/src/utils/math.spec.ts @@ -3,8 +3,8 @@ import { getPercentage, sum } from './math' describe('math utilis test', () => { describe('getPercentage test', () => { it('should return the correct percent', () => { - const dataA: Array<number> = [1, 2, 3, 4, 5] - const dataB: Array<number> = [5, 4, 3] + const dataA: number[] = [1, 2, 3, 4, 5] + const dataB: number[] = [5, 4, 3] const result = getPercentage(dataA, dataB) expect(result).toBe(25) }) @@ -12,7 +12,7 @@ describe('math utilis test', () => { describe('sum test', () => { it('should return the correct sum', () => { - const dataA: Array<number> = [1, 2, 3, 4, 5] + const dataA: number[] = [1, 2, 3, 4, 5] const result = sum(dataA) expect(result).toBe(15) }) diff --git a/src/utils/math.ts b/src/utils/math.ts index ddb43df2a3ee7d52f7723dc1538bc2e744142098..d0664a64f256ac94abe0193e49c75f28edd5bb32 100644 --- a/src/utils/math.ts +++ b/src/utils/math.ts @@ -4,12 +4,12 @@ export function getRoundFloat(data: number) { return Math.round((data + Number.EPSILON) * 100) / 100 } -export function getPercentage(dataA: Array<number>, dataB: Array<number>) { +export function getPercentage(dataA: number[], dataB: number[]) { return Math.round( Number.parseFloat(((1 - _.mean(dataA) / _.mean(dataB)) * 100).toFixed(2)) ) } -export function sum(dataA: Array<number>) { +export function sum(dataA: number[]) { return Number.parseInt(_.sum(dataA)) } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 1f5abd90ef59db5e8afa4c01e637e1a089bd3f6c..42473d7d0462670d6866923f2d6ae9ff64cc3b53 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -327,7 +327,7 @@ export const formatListWithAnd = (array: string[]) => { } } -export type OffPeakHours = { +export interface OffPeakHours { start: { hour: number; minute: number } end: { hour: number; minute: number } } diff --git a/yarn.lock b/yarn.lock index 13c8840005c17d7744dfc55723d5782fc3fc57fe..458b6260dd9f86bd5b79ebe1e58b201bff5bf09a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1830,10 +1830,17 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": +"@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" - integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" + integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== "@eslint-community/regexpp@^4.6.1": version "4.8.0" @@ -3087,6 +3094,11 @@ expect "^29.0.0" pretty-format "^29.0.0" +"@types/json-schema@^7.0.12": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -3227,6 +3239,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/semver@^7.5.0": + version "7.5.3" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -3261,30 +3278,32 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz#e4fbb4d6dd8dab3e733485c1a44a02189ae75364" - integrity sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg== +"@typescript-eslint/eslint-plugin@^6.0.0": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz#057338df21b6062c2f2fc5999fbea8af9973ac6d" + integrity sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA== dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.56.0" - "@typescript-eslint/type-utils" "5.56.0" - "@typescript-eslint/utils" "5.56.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.7.4" + "@typescript-eslint/type-utils" "6.7.4" + "@typescript-eslint/utils" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.56.0.tgz#42eafb44b639ef1dbd54a3dbe628c446ca753ea6" - integrity sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg== +"@typescript-eslint/parser@^6.0.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: - "@typescript-eslint/scope-manager" "5.56.0" - "@typescript-eslint/types" "5.56.0" - "@typescript-eslint/typescript-estree" "5.56.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" "@typescript-eslint/parser@^6.7.5": @@ -3298,14 +3317,6 @@ "@typescript-eslint/visitor-keys" "6.19.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz#62b4055088903b5254fa20403010e1c16d6ab725" - integrity sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw== - dependencies: - "@typescript-eslint/types" "5.56.0" - "@typescript-eslint/visitor-keys" "5.56.0" - "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -3322,20 +3333,31 @@ "@typescript-eslint/types" "6.19.1" "@typescript-eslint/visitor-keys" "6.19.1" -"@typescript-eslint/type-utils@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz#e6f004a072f09c42e263dc50e98c70b41a509685" - integrity sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/typescript-estree" "5.56.0" - "@typescript-eslint/utils" "5.56.0" - debug "^4.3.4" - tsutils "^3.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/types@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.56.0.tgz#b03f0bfd6fa2afff4e67c5795930aff398cbd834" - integrity sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w== +"@typescript-eslint/scope-manager@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz#a484a17aa219e96044db40813429eb7214d7b386" + integrity sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A== + dependencies: + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" + +"@typescript-eslint/type-utils@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz#847cd3b59baf948984499be3e0a12ff07373e321" + integrity sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ== + dependencies: + "@typescript-eslint/typescript-estree" "6.7.4" + "@typescript-eslint/utils" "6.7.4" + debug "^4.3.4" + ts-api-utils "^1.0.1" "@typescript-eslint/types@5.62.0": version "5.62.0" @@ -3347,18 +3369,15 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.19.1.tgz#2d4c9d492a63ede15e7ba7d129bdf7714b77f771" integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg== -"@typescript-eslint/typescript-estree@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz#48342aa2344649a03321e74cab9ccecb9af086c3" - integrity sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg== - dependencies: - "@typescript-eslint/types" "5.56.0" - "@typescript-eslint/visitor-keys" "5.56.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/types@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.4.tgz#5d358484d2be986980c039de68e9f1eb62ea7897" + integrity sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -3387,19 +3406,45 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.56.0.tgz#db64705409b9a15546053fb4deb2888b37df1f41" - integrity sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.56.0" - "@typescript-eslint/types" "5.56.0" - "@typescript-eslint/typescript-estree" "5.56.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/typescript-estree@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz#f2baece09f7bb1df9296e32638b2e1130014ef1a" + integrity sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ== + dependencies: + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.4.tgz#2236f72b10e38277ee05ef06142522e1de470ff2" + integrity sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.7.4" + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/typescript-estree" "6.7.4" + semver "^7.5.4" "@typescript-eslint/utils@^5.10.0": version "5.62.0" @@ -3415,14 +3460,6 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.56.0": - version "5.56.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz#f19eb297d972417eb13cb69b35b3213e13cc214f" - integrity sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q== - dependencies: - "@typescript-eslint/types" "5.56.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" @@ -3439,6 +3476,22 @@ "@typescript-eslint/types" "6.19.1" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@typescript-eslint/visitor-keys@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz#80dfecf820fc67574012375859085f91a4dff043" + integrity sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA== + dependencies: + "@typescript-eslint/types" "6.7.4" + eslint-visitor-keys "^3.4.1" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -7952,7 +8005,7 @@ eslint-plugin-prettier@3.1.2: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-prettier@^5.0.0: +eslint-plugin-prettier@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== @@ -9412,11 +9465,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -9971,6 +10019,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + image-size@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" @@ -12854,11 +12907,6 @@ nanomatch@^1.2.1, nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"