#!/usr/bin/env node const spawn = require('child_process').spawnSync; const filesToCheck = '*.js'; const FORMAT_START = process.env.FORMAT_START || 'main'; const IS_WIN = process.platform === 'win32'; const ESLINT_PATH = IS_WIN ? 'node_modules\\.bin\\eslint.cmd' : 'node_modules/.bin/eslint'; function main (args) { let fix = false; while (args.length > 0) { switch (args[0]) { case '-f': case '--fix': fix = true; break; default: } args.shift(); } // Check js files that change on unstaged file const fileUnStaged = spawn( 'git', ['diff', '--name-only', '--diff-filter=d', FORMAT_START, filesToCheck], { encoding: 'utf-8' } ); // Check js files that change on staged file const fileStaged = spawn( 'git', ['diff', '--name-only', '--cached', '--diff-filter=d', FORMAT_START, filesToCheck], { encoding: 'utf-8' } ); const options = [ ...fileStaged.stdout.split('\n').filter((f) => f !== ''), ...fileUnStaged.stdout.split('\n').filter((f) => f !== '') ]; if (fix) { options.push('--fix'); } const result = spawn(ESLINT_PATH, [...options], { encoding: 'utf-8' }); if (result.error && result.error.errno === 'ENOENT') { console.error('Eslint not found! Eslint is supposed to be found at ', ESLINT_PATH); return 2; } if (result.status === 1) { console.error('Eslint error:', result.stdout); const fixCmd = 'npm run lint:fix'; console.error(`ERROR: please run "${fixCmd}" to format changes in your commit Note that when running the command locally, please keep your local main branch and working branch up to date with nodejs/node-addon-api to exclude un-related complains. Or you can run "env FORMAT_START=upstream/main ${fixCmd}". Also fix JS files by yourself if necessary.`); return 1; } if (result.stderr) { console.error('Error running eslint:', result.stderr); return 2; } } if (require.main === module) { process.exitCode = main(process.argv.slice(2)); }