lint-staged.config.js 1.5 KB
Newer Older
1
const path = require('path');
2
const fs = require('fs');
3

4 5 6 7
const getPackages = filenames => [
    ...new Set(filenames.map(filename => path.relative(path.join(__dirname, 'packages'), filename).split(path.sep)[0]))
];

8
module.exports = {
9
    // lint all files when global package.json or eslint config changes.
10 11
    './(package.json|.eslintrc.js)': () =>
        `eslint --ext .tsx,.jsx.ts,.js --ignore-path ${path.join(__dirname, '.gitignore')} ${__dirname}`,
12 13

    // check types when ts file or package.json changes.
14
    './(packages/*/package.json|packages/*/**/*.ts?(x))': filenames =>
15
        getPackages(filenames)
16 17 18 19 20 21 22 23
            .map(p => path.join(__dirname, 'packages', p, 'tsconfig.json'))
            .filter(p => {
                try {
                    return fs.statSync(p).isFile();
                } catch (e) {
                    return false;
                }
            })
24 25 26
            .map(p => `tsc -p ${p} --noEmit`),

    // lint changed files
27 28
    '**/*.(j|t)s?(x)': filenames => [
        `eslint ${filenames.join(' ')}`,
29 30 31 32 33 34 35 36 37 38
        ...getPackages(filenames).map(p => {
            const filename = path.join(__dirname, 'packages', p, 'package.json');
            const packageFile = JSON.parse(fs.readFileSync(filename, 'utf-8'));
            if (packageFile.scripts.test === 'jest') {
                return `yarn workspace @visualdl/${p} run test --silent --bail --findRelatedTests ${filenames.join(
                    ' '
                )}`;
            }
            return `yarn workspace @visualdl/${p} run test`;
        })
39
    ]
40
};