Skip to content

fix: performances, sécurité et qualité — 4 corrections audit LaForge#10

Open
naarob wants to merge 1 commit into0N0K0:mainfrom
naarob:main
Open

fix: performances, sécurité et qualité — 4 corrections audit LaForge#10
naarob wants to merge 1 commit into0N0K0:mainfrom
naarob:main

Conversation

@naarob
Copy link
Copy Markdown

@naarob naarob commented Mar 26, 2026

Contexte

Audit statique automatique effectué par LaForge sur les 50 fichiers TypeScript du projet (7 669 lignes). 4 problèmes concrets identifiés et corrigés.


Corrections

variableBuilder.tsfindVariables() : N appels API → 1

La méthode faisait une boucle séquentielle sur findVariable(), qui appelle figma.variables.getLocalVariablesAsync() à chaque itération. Avec 10 variables = 10 round-trips vers Figma.

Fix : un seul getCollectionVariables() + Set.has() en mémoire.

// Avant — N appels API
for (const name of variableNames) {
  const variable = await this.findVariable(collectionName, name); // ← appel Figma
  if (variable) variables.push(variable);
}

// Après — 1 appel API
const allVars = await this.getCollectionVariables(collectionName);
const nameSet = new Set(variableNames);
return allVars.filter((v) => nameSet.has(v.name));

🐛 colorUtils.tslightness non clampée dans generateGreyShades()

Si step > 1000, lightness = 1 - step/1000 devient négative. culori accepte silencieusement les valeurs hors [0, 1] avec un rendu indéfini.

Fix : Math.max(0, Math.min(1, 1 - t))


⚠️ colorUtils.tsMath.min/max.apply() antipattern

Math.min.apply(Math, arr) est un idiome ES5. Le tsconfig cible ES2020 — utiliser le spread natif.

Fix : Math.min(...arr) / Math.max(...arr)


🔍 4 fichiers UI — console.log/warn en production

Les logs étaient actifs inconditionnellement dans colorSelector.ts, buttonListeners.ts, main.ts, formData.ts. Ils exposent des données de formulaire dans la console Figma.

Fix : ajout de const DEBUG = false en haut de chaque fichier, chaque appel conditionné par if (DEBUG). Silencieux en production, activable localement sans modifier la logique.


Build : npm run build ✅ — tsc --noEmit ✅ — bundle 104KB

JSDoc ajouté sur les 3 fonctions exportées de colorUtils.ts.

…UG flag

- variableBuilder.ts: findVariables() remplace la boucle séquentielle (N appels
  getLocalVariablesAsync) par un seul getCollectionVariables() + filter en mémoire
- colorUtils.ts: Math.min/max.apply() → Math.min/max(...arr) (ES2020 idiomatic)
- colorUtils.ts: lightness dans generateGreyShades() clampée dans [0,1] pour éviter
  les valeurs négatives si step > 1000
- colorUtils.ts: ajout JSDoc sur les 3 fonctions exportées
- ui/*.ts: console.log/warn conditionnés à const DEBUG = false — silencieux en
  production, activables pour le débogage sans modifier le code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant