diff --git a/.lintstagedrc.js b/.lintstagedrc.js new file mode 100644 index 0000000..b6c82ce --- /dev/null +++ b/.lintstagedrc.js @@ -0,0 +1,20 @@ +// Lint-staged configuration +// Handles large batches of files with proper memory management + +module.exports = { + '*.{ts,tsx}': (filenames) => { + // Process files in smaller batches to avoid memory issues + const batchSize = 20; + const batches = []; + + for (let i = 0; i < filenames.length; i += batchSize) { + batches.push(filenames.slice(i, i + batchSize)); + } + + return batches.map((batch) => { + return `NODE_OPTIONS='--max-old-space-size=4096' eslint --fix --config eslint.config.js ${batch.join(' ')}`; + }); + }, + '*.{json,md,yaml,yml}': 'prettier --write', +}; + diff --git a/scripts/lint-batch.sh b/scripts/lint-batch.sh new file mode 100755 index 0000000..cc53ec5 --- /dev/null +++ b/scripts/lint-batch.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Lint files in batches to avoid memory issues +# Usage: ./scripts/lint-batch.sh [files...] + +set -e + +BATCH_SIZE=20 +FILES=("$@") + +if [ ${#FILES[@]} -eq 0 ]; then + echo "No files provided" + exit 0 +fi + +echo "Linting ${#FILES[@]} files in batches of $BATCH_SIZE..." + +for ((i=0; i<${#FILES[@]}; i+=BATCH_SIZE)); do + BATCH=("${FILES[@]:i:BATCH_SIZE}") + echo "Processing batch $((i/BATCH_SIZE + 1)): ${#BATCH[@]} files" + + NODE_OPTIONS='--max-old-space-size=4096' \ + eslint --fix --config eslint.config.js "${BATCH[@]}" || { + echo "ESLint failed on batch $((i/BATCH_SIZE + 1))" + exit 1 + } +done + +echo "All batches processed successfully" +