{ "name": "metalfromeu", "version": "0.0.1", "private": true, "type": "module", "description": "Monorepo metalfrom.eu — outillage qualité (lint, types, tests). Chaque app garde son propre runtime.", "workspaces": [ "apps/api" ], "scripts": { "lint": "eslint . --cache --cache-location node_modules/.cache/eslint/", "lint:fix": "eslint . --fix --cache --cache-location node_modules/.cache/eslint/", "typecheck": "tsc -p jsconfig.json", "test": "vitest run", "test:watch": "vitest", "test:cov": "vitest run --coverage", "test:mutation": "stryker run", "test:mutation:full": "stryker run stryker.full.config.json", "lint:py": "ruff check .", "lint:py:fix": "ruff check . --fix", "test:py": "npm run test:py:geocoder && npm run test:py:crawler", "test:py:geocoder": "cd apps/geocoder && python -m pytest tests -q", "test:py:crawler": "cd apps/crawler && python -m pytest tests -q", "audit:js": "npm audit --audit-level=high", "audit:py": "pip-audit -r apps/api/../crawler/requirements.txt -r apps/geocoder/requirements.txt", "_comment_check": "`check` = la porte de qualite lancee avant chaque push. Les cinq verifications tournent en parallele (voir scripts/check.mjs). Mutation et audits de dependances en sont exclus : trop lents / dependants du reseau — voir `check:full`.", "check": "node scripts/check.mjs", "check:full": "npm run check && npm run test:e2e && npm run audit:js && npm run audit:py && npm run test:mutation:full", "hooks:install": "git config core.hooksPath .githooks", "_comment_cache": "lint et typecheck utilisent un cache dans node_modules/.cache : `check` tourne des dizaines de fois par jour, refaire l'analyse complete de fichiers inchanges a chaque fois n'apporte rien. Les caches sont invalides par mtime+contenu ; `npm run check:clean` les purge.", "check:clean": "node -e \"require('fs').rmSync('node_modules/.cache',{recursive:true,force:true})\"", "check:sequential": "node scripts/check.mjs --sequential", "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "test:e2e:install": "playwright install chromium", "_comment_e2e": "Les parcours Playwright (~22 s) ne sont PAS dans `check` : celui-ci tourne des dizaines de fois par jour et doit rester sous 10 s. Ils sont lances par le hook pre-push, granularite correcte pour ce cout. `npm run test:e2e:install` recupere Chromium sur un clone neuf." }, "devDependencies": { "@axe-core/playwright": "^4.13.0", "@eslint/js": "^9.17.0", "@playwright/test": "^1.62.1", "@stryker-mutator/core": "^8.7.1", "@stryker-mutator/vitest-runner": "^8.7.1", "@vitest/coverage-v8": "^2.1.8", "axe-core": "^4.10.2", "eslint": "^9.17.0", "globals": "^15.14.0", "jsdom": "^25.0.1", "typescript": "^5.7.2", "vitest": "^2.1.8" } }