Skip to content
Snippets Groups Projects
Commit a3fa89b4 authored by SAFINE LAGET Anis's avatar SAFINE LAGET Anis Committed by BITARD Michaël
Browse files

chore(eslint): interdit les utilisations deprecated (!1685)

parent 893848e5
No related branches found
No related tags found
1 merge request!1685chore(eslint): interdit les utilisations deprecated
Pipeline #545905 passed
...@@ -92,6 +92,7 @@ export default [ ...@@ -92,6 +92,7 @@ export default [
'@typescript-eslint/strict-boolean-expressions': 'error', '@typescript-eslint/strict-boolean-expressions': 'error',
'@typescript-eslint/no-empty-object-type': 0, '@typescript-eslint/no-empty-object-type': 0,
'@typescript-eslint/no-deprecated': 'warn',
}, },
}, },
{ {
......
...@@ -27,6 +27,7 @@ import { ...@@ -27,6 +27,7 @@ import {
import { ActiviteId } from 'camino-common/src/activite' import { ActiviteId } from 'camino-common/src/activite'
import { getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections' import { getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections'
import { getUtilisateursEmailsByEntrepriseIds } from '../../../database/queries/utilisateurs.queries' import { getUtilisateursEmailsByEntrepriseIds } from '../../../database/queries/utilisateurs.queries'
import { callAndExit } from '../../../tools/fp-tools'
/** /**
* Retourne les activités * Retourne les activités
...@@ -161,13 +162,11 @@ export const activiteDeposer = async ({ id }: { id: ActiviteId }, { user, pool } ...@@ -161,13 +162,11 @@ export const activiteDeposer = async ({ id }: { id: ActiviteId }, { user, pool }
try { try {
if (!user) throw new Error('droits insuffisants') if (!user) throw new Error('droits insuffisants')
const titreTypeId = memoize(() => titreTypeIdByActiviteId(id, pool)) const titreTypeId = memoize(() => callAndExit(titreTypeIdByActiviteId(id, pool)))
const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(id, pool)) const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(id, pool))
const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(id, pool)) const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(id, pool))
const activite = await getActiviteById(id, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) const activite = await callAndExit(getActiviteById(id, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires))
if (!activite) throw new Error("l'activité n'existe pas")
const activitesDocuments = await getActiviteDocumentsByActiviteId(id, pool) const activitesDocuments = await getActiviteDocumentsByActiviteId(id, pool)
const sectionsWithValue = getSectionsWithValue(activite.sections, activite.contenu) const sectionsWithValue = getSectionsWithValue(activite.sections, activite.contenu)
......
import { sql } from '@pgtyped/runtime' import { sql } from '@pgtyped/runtime'
import { Redefine, dbQueryAndValidate } from '../../pg-database' import { EffectDbQueryAndValidateErrors, Redefine, dbQueryAndValidate, effectDbQueryAndValidate } from '../../pg-database'
import { import {
IDeleteActiviteDocumentQueryQuery, IDeleteActiviteDocumentQueryQuery,
IGetActiviteByIdQueryQuery, IGetActiviteByIdQueryQuery,
...@@ -33,20 +33,28 @@ import { ACTIVITES_STATUTS_IDS, ActivitesStatutId } from 'camino-common/src/stat ...@@ -33,20 +33,28 @@ import { ACTIVITES_STATUTS_IDS, ActivitesStatutId } from 'camino-common/src/stat
import { CaminoDate, getCurrent } from 'camino-common/src/date' import { CaminoDate, getCurrent } from 'camino-common/src/date'
import { titreIdValidator } from 'camino-common/src/validators/titres' import { titreIdValidator } from 'camino-common/src/validators/titres'
import { ActivitesTypesId } from 'camino-common/src/static/activitesTypes' import { ActivitesTypesId } from 'camino-common/src/static/activitesTypes'
import { SimplePromiseFn } from 'camino-common/src/typescript-tools' import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, SimplePromiseFn } from 'camino-common/src/typescript-tools'
import { ActiviteDocumentTypeId } from 'camino-common/src/static/documentsTypes' import { ActiviteDocumentTypeId } from 'camino-common/src/static/documentsTypes'
import { sectionValidator } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections' import { sectionValidator } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections'
import { Effect } from 'effect'
import { CaminoError } from 'camino-common/src/zod-tools'
import { callAndExit } from '../../tools/fp-tools'
const typeDeTitreIntrouvablePourActivite = `Pas de type de titre trouvé pour l'activité` as const
type TitreTypeIdByActiviteIdErrors = EffectDbQueryAndValidateErrors | typeof typeDeTitreIntrouvablePourActivite
export const titreTypeIdByActiviteId = (activiteId: ActiviteIdOrSlug, pool: Pool): Effect.Effect<TitreTypeId, CaminoError<TitreTypeIdByActiviteIdErrors>> =>
Effect.Do.pipe(
Effect.flatMap(() => effectDbQueryAndValidate(getTitreTypeIdByActiviteId, { activiteId }, pool, titreTypeIdObjectValidator)),
Effect.filterOrFail(
result => isNotNullNorUndefinedNorEmpty(result) && result.length === 1,
() => ({ message: typeDeTitreIntrouvablePourActivite, detail: `Pas de type de titre trouvé pour l'activité ${activiteId}` })
),
Effect.map(result => result[0].titre_type_id)
)
export const titreTypeIdByActiviteId = async (activiteId: ActiviteIdOrSlug, pool: Pool): Promise<TitreTypeId> => { const miseAJourActiviteInterdite = `Interdiction d'éditer une activité` as const
const typeIds = await dbQueryAndValidate(getTitreTypeIdByActiviteId, { activiteId }, pool, titreTypeIdObjectValidator) type UpdateActiviteQueryErrors = EffectDbQueryAndValidateErrors | typeof miseAJourActiviteInterdite
if (typeIds.length === 0) { export const updateActiviteQuery = (
throw new Error(`Pas de type de titre trouvé pour l'activité ${activiteId}`)
}
return typeIds[0].titre_type_id
}
export const updateActiviteQuery = async (
pool: Pool, pool: Pool,
user: User, user: User,
activiteId: ActiviteId, activiteId: ActiviteId,
...@@ -54,12 +62,32 @@ export const updateActiviteQuery = async ( ...@@ -54,12 +62,32 @@ export const updateActiviteQuery = async (
titreTypeId: SimplePromiseFn<TitreTypeId>, titreTypeId: SimplePromiseFn<TitreTypeId>,
titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>, titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>,
entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]> entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]>
): Promise<void> => { ): Effect.Effect<void, CaminoError<UpdateActiviteQueryErrors>> =>
if (user === null || user === undefined || !(await canEditActivite(user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires, ACTIVITES_STATUTS_IDS.EN_CONSTRUCTION))) { Effect.Do.pipe(
throw new Error("Interdiction d'éditer une activité") Effect.bind('userNotNull', () =>
} Effect.Do.pipe(
await dbQueryAndValidate(updateActiviteDb, { userId: user.id, activiteId, dateSaisie: getCurrent(), activiteStatutId: ACTIVITES_STATUTS_IDS.EN_CONSTRUCTION, contenu }, pool, z.void()) Effect.map(() => user),
} Effect.filterOrFail(
(userNotNull): userNotNull is NonNullable<User> => isNotNullNorUndefined(userNotNull),
() => ({ message: miseAJourActiviteInterdite, detail: 'Utilisateur null ou undefined' })
)
)
),
Effect.bind('canEditActivite', () =>
Effect.tryPromise({
try: () => canEditActivite(user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires, ACTIVITES_STATUTS_IDS.EN_CONSTRUCTION),
catch: error => ({ message: miseAJourActiviteInterdite, detail: 'Appel à canEditActivite échoué', extra: error }),
})
),
Effect.filterOrFail(
({ canEditActivite }) => canEditActivite,
() => ({ message: miseAJourActiviteInterdite, detail: "Utilisateur n'a pas le droit de modifier cette activité", extra: { activiteId } })
),
Effect.tap(({ userNotNull }) =>
effectDbQueryAndValidate(updateActiviteDb, { userId: userNotNull.id, activiteId, dateSaisie: getCurrent(), activiteStatutId: ACTIVITES_STATUTS_IDS.EN_CONSTRUCTION, contenu }, pool, z.void())
),
Effect.flatMap(() => Effect.void)
)
const updateActiviteDb = sql< const updateActiviteDb = sql<
Redefine<IUpdateActiviteDbQuery, { userId: string; dateSaisie: CaminoDate; activiteId: ActiviteId; activiteStatutId: ActivitesStatutId; contenu: Contenu }, void> Redefine<IUpdateActiviteDbQuery, { userId: string; dateSaisie: CaminoDate; activiteId: ActiviteId; activiteStatutId: ActivitesStatutId; contenu: Contenu }, void>
...@@ -89,27 +117,36 @@ const dbActiviteValidator = activiteValidator ...@@ -89,27 +117,36 @@ const dbActiviteValidator = activiteValidator
utilisateur_id: utilisateurIdValidator.nullable(), utilisateur_id: utilisateurIdValidator.nullable(),
}) })
const activiteInterdite = `Lecture de l'activité impossible` as const
const activiteIntrouvable = `Pas d'activité trouvée` as const
type GetActiviteByIdErrors = EffectDbQueryAndValidateErrors | typeof activiteInterdite | typeof activiteIntrouvable
export type DbActivite = z.infer<typeof dbActiviteValidator> export type DbActivite = z.infer<typeof dbActiviteValidator>
export const getActiviteById = async ( export const getActiviteById = (
activiteId: ActiviteIdOrSlug, activiteId: ActiviteIdOrSlug,
pool: Pool, pool: Pool,
user: User, user: User,
titreTypeId: SimplePromiseFn<TitreTypeId>, titreTypeId: SimplePromiseFn<TitreTypeId>,
titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>, titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>,
entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]> entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]>
): Promise<(DbActivite & { suppression: boolean }) | null> => { ): Effect.Effect<DbActivite & { suppression: boolean }, CaminoError<GetActiviteByIdErrors>> => {
const canRead = await canReadTitreActivites(user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires) return Effect.Do.pipe(
Effect.bind('canRead', () =>
if (!canRead) { Effect.tryPromise({
return null try: () => canReadTitreActivites(user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires),
} catch: error => ({ message: activiteInterdite, detail: 'Appel à canReadTitreActivites échoué', extra: error }),
})
const activite = await dbQueryAndValidate(getActiviteByIdQuery, { activiteId }, pool, dbActiviteValidator) ),
if (activite.length === 0) { Effect.filterOrFail(
throw new Error(`Pas d'activité trouvée pour l'id '${activiteId}'`) ({ canRead }) => canRead,
} () => ({ message: activiteInterdite, detail: `Utilisateur ${user?.id} n'a pas la permission nécessaire` })
),
return { ...activite[0], suppression: canDeleteActivite(activite[0], user) } Effect.flatMap(() => effectDbQueryAndValidate(getActiviteByIdQuery, { activiteId }, pool, dbActiviteValidator)),
Effect.filterOrFail(
result => isNotNullNorUndefinedNorEmpty(result) && result.length === 1,
() => ({ message: activiteIntrouvable, detail: `Pas d'activité trouvée pour l'id '${activiteId}'` })
),
Effect.map(result => ({ ...result[0], suppression: canDeleteActivite(result[0], user) }))
)
} }
const getActiviteByIdQuery = sql<Redefine<IGetActiviteByIdQueryQuery, { activiteId: ActiviteIdOrSlug }, DbActivite>>` const getActiviteByIdQuery = sql<Redefine<IGetActiviteByIdQueryQuery, { activiteId: ActiviteIdOrSlug }, DbActivite>>`
...@@ -130,25 +167,32 @@ const canDeleteActivite = (activite: DbActivite, user: User): boolean => { ...@@ -130,25 +167,32 @@ const canDeleteActivite = (activite: DbActivite, user: User): boolean => {
return isSuper(user) && activite.suppression return isSuper(user) && activite.suppression
} }
export const activiteDeleteQuery = async ( const suppressionActiviteInterdite = `Suppression de l'activité interdite` as const
type ActiviteDeleteQueryErrors = EffectDbQueryAndValidateErrors
export const activiteDeleteQuery = (
activiteId: ActiviteId, activiteId: ActiviteId,
pool: Pool, pool: Pool,
user: User, user: User,
titreTypeId: SimplePromiseFn<TitreTypeId>, titreTypeId: SimplePromiseFn<TitreTypeId>,
titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>, titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>,
entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]> entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]>
): Promise<boolean> => { ): Effect.Effect<boolean, CaminoError<ActiviteDeleteQueryErrors>> =>
const activite = await getActiviteById(activiteId, pool, user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires) Effect.Do.pipe(
Effect.flatMap(() => getActiviteById(activiteId, pool, user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires)),
if (activite !== null && activite.suppression) { Effect.filterOrFail(
await dbQueryAndValidate(activiteDocumentDeleteDb, { activiteId }, pool, z.void()) activite => activite.suppression,
await dbQueryAndValidate(activiteDeleteDb, { activiteId }, pool, z.void()) () => ({ message: suppressionActiviteInterdite })
),
return true Effect.flatMap(() =>
} Effect.Do.pipe(
Effect.tap(() => effectDbQueryAndValidate(activiteDocumentDeleteDb, { activiteId }, pool, z.void())),
return false Effect.tap(() => effectDbQueryAndValidate(activiteDeleteDb, { activiteId }, pool, z.void())),
} Effect.map(() => true)
)
),
// @TODO 2025-03-25: retirer cette ligne et mieux gérer les cas d'erreurs au niveau des appelants (ne plus retourner de booléen)
Effect.catchAll(() => Effect.succeed(false))
)
const activiteDeleteDb = sql<Redefine<IActiviteDeleteDbQuery, { activiteId: ActiviteId }, void>>` const activiteDeleteDb = sql<Redefine<IActiviteDeleteDbQuery, { activiteId: ActiviteId }, void>>`
delete from titres_activites ta delete from titres_activites ta
...@@ -309,7 +353,7 @@ export const getLargeobjectIdByActiviteDocumentId = async (activiteDocumentId: A ...@@ -309,7 +353,7 @@ export const getLargeobjectIdByActiviteDocumentId = async (activiteDocumentId: A
if (result.length === 1) { if (result.length === 1) {
const activiteDocument = result[0] const activiteDocument = result[0]
const titreTypeId = () => titreTypeIdByActiviteId(activiteDocument.activite_id, pool) const titreTypeId = () => callAndExit(titreTypeIdByActiviteId(activiteDocument.activite_id, pool))
const administrationsLocales = () => administrationsLocalesByActiviteId(activiteDocument.activite_id, pool) const administrationsLocales = () => administrationsLocalesByActiviteId(activiteDocument.activite_id, pool)
const entreprisesTitulairesOuAmodiataires = () => entreprisesTitulairesOuAmoditairesByActiviteId(activiteDocument.activite_id, pool) const entreprisesTitulairesOuAmodiataires = () => entreprisesTitulairesOuAmoditairesByActiviteId(activiteDocument.activite_id, pool)
if (await canReadTitreActivites(user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires)) { if (await canReadTitreActivites(user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires)) {
......
...@@ -70,13 +70,13 @@ export const updateActivite = ...@@ -70,13 +70,13 @@ export const updateActivite =
res.sendStatus(HTTP_STATUS.BAD_REQUEST) res.sendStatus(HTTP_STATUS.BAD_REQUEST)
} else { } else {
try { try {
const titreTypeId = memoize(() => titreTypeIdByActiviteId(activiteIdParsed.data, pool)) const titreTypeId = memoize(() => callAndExit(titreTypeIdByActiviteId(activiteIdParsed.data, pool)))
const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(activiteIdParsed.data, pool)) const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(activiteIdParsed.data, pool))
const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(activiteIdParsed.data, pool)) const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(activiteIdParsed.data, pool))
const result = await getActiviteById(activiteIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) const result = await callAndExit(getActiviteById(activiteIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires))
if (result === null || !(await canEditActivite(user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, result.activite_statut_id))) { if (!(await canEditActivite(user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, result.activite_statut_id))) {
res.sendStatus(HTTP_STATUS.FORBIDDEN) res.sendStatus(HTTP_STATUS.FORBIDDEN)
} else { } else {
const parsed = activiteEditionValidator.safeParse(req.body) const parsed = activiteEditionValidator.safeParse(req.body)
...@@ -85,7 +85,7 @@ export const updateActivite = ...@@ -85,7 +85,7 @@ export const updateActivite =
res.sendStatus(HTTP_STATUS.BAD_REQUEST) res.sendStatus(HTTP_STATUS.BAD_REQUEST)
} else { } else {
const contenu = extractContenuFromSectionWithValue(result.sections, parsed.data.sectionsWithValue) const contenu = extractContenuFromSectionWithValue(result.sections, parsed.data.sectionsWithValue)
await updateActiviteQuery(pool, user, result.id, contenu, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) await callAndExit(updateActiviteQuery(pool, user, result.id, contenu, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires))
const activiteDocumentsToCreate = parsed.data.newTempDocuments const activiteDocumentsToCreate = parsed.data.newTempDocuments
const alreadyExistingDocumentIds = parsed.data.activiteDocumentIds const alreadyExistingDocumentIds = parsed.data.activiteDocumentIds
...@@ -178,18 +178,14 @@ export const getActivite = ...@@ -178,18 +178,14 @@ export const getActivite =
res.sendStatus(HTTP_STATUS.BAD_REQUEST) res.sendStatus(HTTP_STATUS.BAD_REQUEST)
} else { } else {
try { try {
const titreTypeId = memoize(() => titreTypeIdByActiviteId(activiteIdParsed.data, pool)) const titreTypeId = memoize(() => callAndExit(titreTypeIdByActiviteId(activiteIdParsed.data, pool)))
const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(activiteIdParsed.data, pool)) const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(activiteIdParsed.data, pool))
const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(activiteIdParsed.data, pool)) const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(activiteIdParsed.data, pool))
const result = await getActiviteById(activiteIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) const result = await callAndExit(getActiviteById(activiteIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires))
if (result !== null) { const activite = await formatActivite(result, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires)
const activite = await formatActivite(result, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) res.json(activite)
res.json(activite)
} else {
res.sendStatus(HTTP_STATUS.NOT_FOUND)
}
} catch (e) { } catch (e) {
res.sendStatus(HTTP_STATUS.INTERNAL_SERVER_ERROR) res.sendStatus(HTTP_STATUS.INTERNAL_SERVER_ERROR)
console.error(e) console.error(e)
...@@ -205,11 +201,11 @@ export const deleteActivite = ...@@ -205,11 +201,11 @@ export const deleteActivite =
res.sendStatus(HTTP_STATUS.BAD_REQUEST) res.sendStatus(HTTP_STATUS.BAD_REQUEST)
} else { } else {
const id = activiteIdParsed.data const id = activiteIdParsed.data
const titreTypeId = memoize(() => titreTypeIdByActiviteId(id, pool)) const titreTypeId = memoize(() => callAndExit(titreTypeIdByActiviteId(id, pool)))
const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(id, pool)) const administrationsLocales = memoize(() => administrationsLocalesByActiviteId(id, pool))
const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(id, pool)) const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByActiviteId(id, pool))
const isOk = await activiteDeleteQuery(id, pool, req.auth, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires) const isOk = await callAndExit(activiteDeleteQuery(id, pool, req.auth, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires))
if (isOk) { if (isOk) {
res.sendStatus(HTTP_STATUS.NO_CONTENT) res.sendStatus(HTTP_STATUS.NO_CONTENT)
} else { } else {
......
...@@ -63,6 +63,7 @@ export default [{ ...@@ -63,6 +63,7 @@ export default [{
'@typescript-eslint/no-misused-promises': 'error', '@typescript-eslint/no-misused-promises': 'error',
'@typescript-eslint/await-thenable': 'error', '@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/no-unnecessary-condition': 'error', '@typescript-eslint/no-unnecessary-condition': 'error',
'@typescript-eslint/no-deprecated': 'warn',
}, },
}]; }];
...@@ -83,6 +83,7 @@ export default [ ...@@ -83,6 +83,7 @@ export default [
'@typescript-eslint/no-empty-function': 0, '@typescript-eslint/no-empty-function': 0,
'@typescript-eslint/strict-boolean-expressions': 'error', '@typescript-eslint/strict-boolean-expressions': 'error',
'@typescript-eslint/no-deprecated': 'warn',
// TODO 2024-09-19 activer ça sur le front ? // TODO 2024-09-19 activer ça sur le front ?
// '@typescript-eslint/no-floating-promises': 'error', // '@typescript-eslint/no-floating-promises': 'error',
// '@typescript-eslint/no-misused-promises': 'error', // '@typescript-eslint/no-misused-promises': 'error',
......
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
"dev:update": "npm-check-updates && npm install && npm audit fix", "dev:update": "npm-check-updates && npm install && npm audit fix",
"start": "node ./index.js", "start": "node ./index.js",
"test": "vitest", "test": "vitest",
"lint": "prettier --write src && eslint --fix src --max-warnings=0", "lint": "prettier --write src && eslint --fix src",
"lint:check": "prettier --check src && eslint src --max-warnings=0", "lint:check": "prettier --check src && eslint src",
"storybook": "storybook dev -p 6006", "storybook": "storybook dev -p 6006",
"storybook:build": "storybook build", "storybook:build": "storybook build",
"storybook:test": "test-storybook --browsers chromium" "storybook:test": "test-storybook --browsers chromium"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment