#!/usr/bin/env node import fs from 'fs'; import path from 'path'; import { execSync } from 'child_process'; const prettier = path.resolve('node_modules', '.bin', 'prettier'); const biome = path.resolve('node_modules', '.bin', 'biome'); [prettier, biome].forEach((bin) => { if (!fs.existsSync(bin)) { throw new Error( [`${path.basename(bin)} not found at path: ${bin}`, 'Please run `pnpm i` first'].join('\n'), ); } }); const prettierConfig = path.resolve('.prettierrc.js'); const biomeConfig = path.resolve('biome.jsonc'); const ignore = path.resolve('.prettierignore'); const ROOT_DIRS_TO_SKIP = ['.git', 'node_modules', 'packages', '.turbo', 'cypress']; const EXTENSIONS_TO_FORMAT_WITH_PRETTIER = ['.yml']; const EXTENSIONS_TO_FORMAT_WITH_BIOME = ['.js', '.json', '.ts']; const isDir = (path) => fs.lstatSync(path).isDirectory(); const isPrettierTarget = (path) => EXTENSIONS_TO_FORMAT_WITH_PRETTIER.some((ext) => path.endsWith(ext)); const isBiomeTarget = (path) => EXTENSIONS_TO_FORMAT_WITH_BIOME.some((ext) => path.endsWith(ext)); const biomeTargets = []; const prettierTargets = []; const walk = (dir) => { fs.readdirSync(dir).forEach((entry) => { const entryPath = path.resolve(dir, entry); if (isDir(entryPath)) walk(entryPath); if (isPrettierTarget(entryPath)) prettierTargets.push(entryPath); if (isBiomeTarget(entryPath)) biomeTargets.push(entryPath); }); }; fs.readdirSync('.').forEach((cur) => { if (ROOT_DIRS_TO_SKIP.includes(cur)) return; if (isDir(cur)) walk(cur); if (isPrettierTarget(cur)) prettierTargets.push(cur); if (isBiomeTarget(cur)) biomeTargets.push(cur); }); execSync( [ prettier, '--config', prettierConfig, '--ignore-path', ignore, '--write', prettierTargets.join(' '), ].join(' '), ); execSync( [biome, 'format', '--write', `--config-path=${biomeConfig}`, biomeTargets.join(' ')].join(' '), );