lint-staged.config.js 2.2 KB
Newer Older
P
Peter Pan 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/**
 * Copyright 2020 Baidu Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

17
const path = require('path');
18
const fs = require('fs');
19

20 21 22 23 24 25
const getPackages = filenames =>
    [
        ...new Set(
            filenames.map(filename => path.relative(path.join(__dirname, 'packages'), filename).split(path.sep)[0])
        )
    ].filter(p => p !== '..');
26

27
module.exports = {
28
    // lint all files when global package.json or eslint config changes.
29 30
    './(package.json|.eslintrc.js)': () =>
        `eslint --ext .tsx,.jsx.ts,.js --ignore-path ${path.join(__dirname, '.gitignore')} ${__dirname}`,
31 32

    // check types when ts file or package.json changes.
33
    './(packages/*/package.json|packages/*/**/*.ts?(x))': filenames =>
34
        getPackages(filenames)
35 36 37 38 39 40 41 42
            .map(p => path.join(__dirname, 'packages', p, 'tsconfig.json'))
            .filter(p => {
                try {
                    return fs.statSync(p).isFile();
                } catch (e) {
                    return false;
                }
            })
43 44 45
            .map(p => `tsc -p ${p} --noEmit`),

    // lint changed files
46 47
    '**/*.(j|t)s?(x)': filenames => [
        `eslint ${filenames.join(' ')}`,
48 49 50
        ...getPackages(filenames).map(p => {
            const filename = path.join(__dirname, 'packages', p, 'package.json');
            const packageFile = JSON.parse(fs.readFileSync(filename, 'utf-8'));
51
            if (packageFile.scripts.test.startsWith('jest')) {
52 53 54 55 56 57
                return `yarn workspace @visualdl/${p} run test --silent --bail --findRelatedTests ${filenames.join(
                    ' '
                )}`;
            }
            return `yarn workspace @visualdl/${p} run test`;
        })
58
    ]
59
};