$ biome lint . docs/auditorias/ficha-puesto-trabajo/implementacion-v3/mediciones.json lint ━━━━━━━━━━━━━━━━━━━━━━━━ i The size of the file is 2.5 MiB, which exceeds the configured maximum of 1.0 MiB for this project. Use the `files.maxSize` configuration to change the maximum size of files processed, or `files.includes` to ignore the file. modules/companies/src/api/application/person-photo.use-cases.ts:33:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━ i Logical expression contains unnecessary complexity. 32 │ async save(companyId: string, personId: string, data: Uint8Array) { > 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) i Safe fix: Reduce the complexity of the logical expression. 31 31 │ 32 32 │ async save(companyId: string, personId: string, data: Uint8Array) { 33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success) 33 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success)) 34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); 35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) modules/companies/src/api/application/person-photo.use-cases.ts:49:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━ i Logical expression contains unnecessary complexity. 48 │ async remove(companyId: string, personId: string) { > 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); 51 │ i Safe fix: Reduce the complexity of the logical expression. 47 47 │ 48 48 │ async remove(companyId: string, personId: string) { 49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success) 49 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success)) 50 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); 51 51 │ .agents/skills/shadcn/assets/showcase/color-pair.tsx:81:17 lint/style/noNegationElse FIXABLE ━━━━━━━━━━ ! Invert blocks when performing a negation test. 79 │ }, []) 80 │ > 81 │ const level = !info │ ^^^^^ > 82 │ ? "" ... > 88 │ ? "AA Large" > 89 │ : "Fail" │ ^^^^^^^^ 90 │ 91 │ return ( i Safe fix: Invert the condition and the blocks. 79 79 │ }, []) 80 80 │ 81 │ - ··const·level·=·!info 82 │ - ····?·"" 83 │ - ····:·info.ratio·>=·7 81 │ + ··const·level·=·info 82 │ + ····?·info.ratio·>=·7 84 83 │ ? "AAA" 85 84 │ : info.ratio >= 4.5 ······· │ 87 86 │ : info.ratio >= 3 88 87 │ ? "AA Large" 89 │ - ··········:·"Fail" 88 │ + ··········:·"Fail" 89 │ + ····:·"" 90 90 │ 91 91 │ return ( .agents/skills/shadcn/assets/showcase/state-matrix.tsx:1:8 lint/style/useImportType FIXABLE ━━━━━━━━━━ × All these imports are only used as types. > 1 │ import * as React from "react" │ ^^^^^^^^^^^^^^^^^^^^^^^ 2 │ 3 │ import { cn } from "@/lib/utils" i Importing the types with import type ensures that they are removed by the compilers and avoids loading unnecessary modules. i Safe fix: Use import type. 1 │ import·type·*·as·React·from·"react" │ +++++ .artifacts/account-deletion/cleanup-test.mts:3:1 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━━ × Block statements are preferred in this position. 1 │ import { createDatabase, readDatabaseEnvironment } from '../../apps/server/src/config/database'; 2 │ const env=readDatabaseEnvironment(process.env); > 3 │ if(env.DB_NAME!=='metis_desk_test'||env.NODE_ENV!=='test')throw Error('Solo pruebas'); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 │ const db=createDatabase(env); 5 │ const company='01a17cae-4bba-7070-a394-13f9009c5cfb'; i Unsafe fix: Wrap the statement with a `JsBlockStatement` 3 │ if(env.DB_NAME!=='metis_desk_test'||env.NODE_ENV!=='test')·{·throw·Error('Solo·pruebas');·} │ +++ ++ .artifacts/account-deletion/cleanup-test.mts:11:2 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 9 │ const rows=await db.query('SELECT i.kind,i.id FROM access_items i JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company',{replacements,transaction,type:'SELECT'}); 10 │ console.info({fixtureCompany:company,items:rows}); > 11 │ for(const table of ['access_references','access_person_references']) await db.query(`DELETE r FROM ${table} r JOIN access_items i ON i.id=r.itemId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company`,{replacements,transaction}); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 12 │ await db.query('DELETE r FROM access_revisions r JOIN access_items i ON i.id=r.itemId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company',{replacements,transaction}); 13 │ for(const table of ['access_account_values','access_system_values']) await db.query(`DELETE v FROM ${table} v JOIN access_items i ON i.id=v.ownerId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company`,{replacements,transaction}); i Unsafe fix: Wrap the statement with a `JsBlockStatement` 11 │ ·for(const·table·of·['access_references','access_person_references'])·{·await·db.query(`DELETE·r·FROM·${table}·r·JOIN·access_items·i·ON·i.id=r.itemId·JOIN·access_workspaces·w·ON·w.id=i.workspaceId·WHERE·w.companyId=:company`,{replacements,transaction});·} │ ++ ++ .artifacts/account-deletion/cleanup-test.mts:13:2 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 11 │ for(const table of ['access_references','access_person_references']) await db.query(`DELETE r FROM ${table} r JOIN access_items i ON i.id=r.itemId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company`,{replacements,transaction}); 12 │ await db.query('DELETE r FROM access_revisions r JOIN access_items i ON i.id=r.itemId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company',{replacements,transaction}); > 13 │ for(const table of ['access_account_values','access_system_values']) await db.query(`DELETE v FROM ${table} v JOIN access_items i ON i.id=v.ownerId JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company`,{replacements,transaction}); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 14 │ await db.query('DELETE i FROM access_items i JOIN access_workspaces w ON w.id=i.workspaceId WHERE w.companyId=:company',{replacements,transaction}); 15 │ await db.query('DELETE FROM access_workspaces WHERE companyId=:company',{replacements,transaction}); i Unsafe fix: Wrap the statement with a `JsBlockStatement` 13 │ ·for(const·table·of·['access_account_values','access_system_values'])·{·await·db.query(`DELETE·v·FROM·${table}·v·JOIN·access_items·i·ON·i.id=v.ownerId·JOIN·access_workspaces·w·ON·w.id=i.workspaceId·WHERE·w.companyId=:company`,{replacements,transaction});·} │ ++ ++ modules/companies/src/api/application/person-photo.use-cases.ts:25:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 24 │ async get(personId: string) { > 25 │ if (!z.uuid().safeParse(personId).success) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 26 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 27 │ const photo = await this.repository.get(personId); 28 │ i Unsafe fix: Wrap the statement with a `JsBlockStatement` 23 23 │ 24 24 │ async get(personId: string) { 25 │ - ····if·(!z.uuid().safeParse(personId).success) 26 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 25 │ + ····if·(!z.uuid().safeParse(personId).success)·{ 26 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 27 │ + ····} 27 28 │ const photo = await this.repository.get(personId); 28 29 │ modules/companies/src/api/application/person-photo.use-cases.ts:33:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 32 │ async save(companyId: string, personId: string, data: Uint8Array) { > 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE")); i Unsafe fix: Wrap the statement with a `JsBlockStatement` 31 31 │ 32 32 │ async save(companyId: string, personId: string, data: Uint8Array) { 33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success) 34 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 33 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{ 34 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 35 │ + ····} 35 36 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) 36 37 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE")); modules/companies/src/api/application/person-photo.use-cases.ts:35:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); > 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE")); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 37 │ if (!(await this.repository.exists(companyId, personId))) 38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND")); i Unsafe fix: Wrap the statement with a `JsBlockStatement` 33 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) 34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); 35 │ - ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes) 36 │ - ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE")); 35 │ + ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes)·{ 36 │ + ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE")); 37 │ + ····} 37 38 │ if (!(await this.repository.exists(companyId, personId))) 38 39 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND")); modules/companies/src/api/application/person-photo.use-cases.ts:37:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE")); > 37 │ if (!(await this.repository.exists(companyId, personId))) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND")); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 39 │ const processed = await this.processor.optimize(data); 40 │ i Unsafe fix: Wrap the statement with a `JsBlockStatement` 35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes) 36 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE")); 37 │ - ····if·(!(await·this.repository.exists(companyId,·personId))) 38 │ - ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND")); 37 │ + ····if·(!(await·this.repository.exists(companyId,·personId)))·{ 38 │ + ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND")); 39 │ + ····} 39 40 │ const processed = await this.processor.optimize(data); 40 41 │ modules/companies/src/api/application/person-photo.use-cases.ts:41:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 39 │ const processed = await this.processor.optimize(data); 40 │ > 41 │ if (!processed.isSuccess) return Result.fail(processed.error); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 42 │ 43 │ return (await this.repository.replace(companyId, personId, processed.data)) i Unsafe fix: Wrap the statement with a `JsBlockStatement` 41 │ ····if·(!processed.isSuccess)·{·return·Result.fail(processed.error);·} │ ++ ++ modules/companies/src/api/application/person-photo.use-cases.ts:49:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 48 │ async remove(companyId: string, personId: string) { > 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST")); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 51 │ 52 │ return (await this.repository.replace(companyId, personId, null)) i Unsafe fix: Wrap the statement with a `JsBlockStatement` 47 47 │ 48 48 │ async remove(companyId: string, personId: string) { 49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success) 50 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 49 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{ 50 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST")); 51 │ + ····} 51 52 │ 52 53 │ return (await this.repository.replace(companyId, personId, null)) modules/companies/src/api/application/process.use-cases.ts:127:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 125 │ const process = UniqueID.create(id); 126 │ > 127 │ if (!(company.isSuccess && process.isSuccess)) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 128 │ return Promise.resolve(Result.fail(new ProcessError("INVALID_REQUEST"))); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 129 │ 130 │ return this.repository.remove(company.data, process.data); i Unsafe fix: Wrap the statement with a `JsBlockStatement` 125 125 │ const process = UniqueID.create(id); 126 126 │ 127 │ - ····if·(!(company.isSuccess·&&·process.isSuccess)) 128 │ - ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST"))); 127 │ + ····if·(!(company.isSuccess·&&·process.isSuccess))·{ 128 │ + ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST"))); 129 │ + ····} 129 130 │ 130 131 │ return this.repository.remove(company.data, process.data); modules/companies/src/api/infrastructure/persistence/migrate-people.ts:11:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 9 │ const columns = await query.describeTable("company_contacts"); 10 │ > 11 │ if (!columns.photoVersion) │ ^^^^^^^^^^^^^^^^^^^^^^^^^^ > 12 │ await query.addColumn("company_contacts", "photoVersion", { > 13 │ type: DataTypes.STRING(64), > 14 │ allowNull: true, > 15 │ }); │ ^^^ 16 │ for (const [name, length] of [ 17 │ ["position", 100], i Unsafe fix: Wrap the statement with a `JsBlockStatement` 9 9 │ const columns = await query.describeTable("company_contacts"); 10 10 │ 11 │ - ··if·(!columns.photoVersion) 11 │ + ··if·(!columns.photoVersion)·{ 12 12 │ await query.addColumn("company_contacts", "photoVersion", { 13 13 │ type: DataTypes.STRING(64), 14 14 │ allowNull: true, 15 │ - ····}); 15 │ + ····}); 16 │ + ··} 16 17 │ for (const [name, length] of [ 17 18 │ ["position", 100], modules/companies/src/api/infrastructure/persistence/person-photo-migration.ts:10:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 8 │ ); 9 │ > 10 │ if (rows.some((row) => row.name === "person_photos")) return; │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11 │ await database 12 │ .getQueryInterface() i Unsafe fix: Wrap the statement with a `JsBlockStatement` 10 │ ··if·(rows.some((row)·=>·row.name·===·"person_photos"))·{·return;·} │ ++ ++ modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:49:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 47 │ }); 48 │ > 49 │ if (!person) return false; │ ^^^^^^^^^^^^^^^^^^^^^^^^^^ 50 │ if (photo) 51 │ await PersonPhotoModel.upsert( i Unsafe fix: Wrap the statement with a `JsBlockStatement` 49 │ ······if·(!person)·{·return·false;·} │ ++ ++ modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:50:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 49 │ if (!person) return false; > 50 │ if (photo) │ ^^^^^^^^^^ > 51 │ await PersonPhotoModel.upsert( > 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version }, > 53 │ { transaction } > 54 │ ); > 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction }); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction }); 57 │ i Unsafe fix: Wrap the statement with a `JsBlockStatement` 48 48 │ 49 49 │ if (!person) return false; 50 │ - ······if·(photo) 50 │ + ······if·(photo)·{ 51 51 │ await PersonPhotoModel.upsert( 52 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version }, 53 53 │ { transaction } 54 │ - ········); 54 │ + ········); 55 │ + ······} 55 56 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction }); 56 57 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction }); modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:55:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━ × Block statements are preferred in this position. 53 │ { transaction } 54 │ ); > 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction }); │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction }); 57 │ i Unsafe fix: Wrap the statement with a `JsBlockStatement` 55 │ ······else·{·await·PersonPhotoModel.destroy({·where:·{·personId·},·transaction·});·} │ ++ ++ The number of diagnostics exceeds the limit allowed. Use --max-diagnostics to increase it. Diagnostics not shown: 5. Checked 2283 files in 1921ms. No fixes applied. Found 18 errors. Found 2 warnings. Found 5 infos. lint ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × Some errors were emitted while running checks. [ELIFECYCLE] Command failed with exit code 1.