// Monorepo-aware lint-staged configuration // STRICT ENFORCEMENT ENABLED: Blocks commits if affected packages have violations // // IMPORTANT: This lints ENTIRE packages, not just changed files. // If you touch ANY file in a package with violations, you must fix the whole package. // This forces incremental cleanup - work in a package = clean up that package. // export default { // TypeScript files - lint and typecheck affected packages '**/*.{ts,tsx}': (filenames) => { const commands = []; // 1. Format first (auto-fixes what it can) commands.push(`prettier --write ${filenames.join(' ')}`); // 2. Extract affected packages from absolute paths // lint-staged passes absolute paths, so we need to extract the relative part const packages = [...new Set(filenames.map(f => { // Match either absolute or relative paths: .../packages/shared/... or packages/shared/... const match = f.match(/(?:^|\/)(apps|packages)\/([^/]+)\//); if (!match) return null; // Return package name format for turbo (e.g., "@mosaic/api") return `@mosaic/${match[2]}`; }))].filter(Boolean); if (packages.length === 0) { return commands; } // 3. Lint entire affected packages via turbo // --max-warnings=0 means ANY warning/error blocks the commit packages.forEach(pkg => { commands.push(`pnpm turbo run lint --filter=${pkg} -- --max-warnings=0`); }); // 4. Type-check affected packages packages.forEach(pkg => { commands.push(`pnpm turbo run typecheck --filter=${pkg}`); }); return commands; }, // Format all other files '**/*.{js,jsx,json,md,yml,yaml}': [ 'prettier --write', ], };