mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-04-06 21:41:42 +02:00
Refonte Structure
This commit is contained in:
63
knowledge/frontend/risques/general.md
Normal file
63
knowledge/frontend/risques/general.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# Frontend — Risques & vigilance : Général
|
||||
|
||||
> Extrait de la base de connaissance Lead_tech. Voir `knowledge/frontend/risques/README.md` pour l'index complet.
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-accessibilite-oubliee"></a>
|
||||
## Accessibilité oubliée (a11y)
|
||||
|
||||
### Risques
|
||||
|
||||
- App inutilisable au clavier/lecteur d'écran
|
||||
- Régressions silencieuses sur focus/labels
|
||||
|
||||
### Symptômes
|
||||
|
||||
- Modales impossibles à fermer au clavier
|
||||
- Inputs sans labels/erreurs non annoncées
|
||||
- Focus "perdu"
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
- Checklist a11y minimale sur chaque écran clé
|
||||
- Gestion de focus (modales, erreurs formulaire)
|
||||
- Labels/aria cohérents + tests simples
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-regex-globale-singleton-lastindex"></a>
|
||||
## Regex globale `/g` en singleton — bug `lastIndex` stateful
|
||||
|
||||
### Risques
|
||||
|
||||
- Une regex avec flag `/g` ou `/y` définie comme constante au niveau module maintient un état `lastIndex` entre les appels
|
||||
- `String.prototype.replace()` réinitialise `lastIndex`, mais `.test()` ou `.exec()` ne le font pas → bug stateful difficile à détecter, souvent introduit par un refactor ultérieur
|
||||
|
||||
### Symptômes
|
||||
|
||||
- `.test(str)` retourne alternativement `true` / `false` sur la même chaîne selon l'ordre d'appel
|
||||
- Bug non reproductible en isolation, uniquement en séquence d'appels
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
```typescript
|
||||
// ❌ RISQUÉ — regex globale partagée entre tous les appels
|
||||
const LINK_PATTERN = /https?:\/\/\S+/gi;
|
||||
function processLinks(content: string) {
|
||||
return content.replace(LINK_PATTERN, ...); // OK today
|
||||
// Mais si quelqu'un ajoute LINK_PATTERN.test(x) ailleurs → bug lastIndex
|
||||
}
|
||||
|
||||
// ✅ SÛR — nouvelle instance à chaque appel, aucun état partagé
|
||||
function makeLinkPattern(): RegExp {
|
||||
return /https?:\/\/\S+/gi;
|
||||
}
|
||||
function processLinks(content: string) {
|
||||
return content.replace(makeLinkPattern(), ...);
|
||||
}
|
||||
```
|
||||
|
||||
- **Règle** : les regex avec flag `/g` ou `/y` utilisées pour transformation de strings → toujours créer via une factory, jamais en singleton de module
|
||||
|
||||
- Contexte technique : TypeScript / React Native — app-alexandrie 24-03-2026
|
||||
Reference in New Issue
Block a user