@interaktiv/dia-scripts
Version:
CLI toolbox with common scripts for most sort of projects at DIA
39 lines (29 loc) • 1.54 kB
JavaScript
;
const path = require('path');
const spawn = require('cross-spawn');
const yargsParser = require('yargs-parser');
const {
hasFile,
isMarkdownFile,
resolveBin
} = require('../../utils');
let args = process.argv.slice(2);
const here = p => path.join(__dirname, p);
const hereRelative = p => here(p).replace(process.cwd(), '.');
const parsedArgs = yargsParser(args);
const useBuiltinConfig = args.includes('--config') !== true && hasFile('.markdownlint.json') !== true && hasFile('.markdownlintrc') !== true && hasFile('.markdownlint.yaml') !== true && hasFile('.markdownlint.yml') !== true;
const config = useBuiltinConfig ? ['--config', hereRelative('../../config/markdownlint.json')] : [];
const useBuiltinIgnore = args.includes('--ignore') !== true;
const ignore = useBuiltinIgnore ? ['--ignore', 'CHANGELOG.md', '--ignore', 'node_modules', '--ignore', '**/ISSUE_TEMPLATE.md', '--ignore', '**/PULL_REQUEST_TEMPLATE.md'] : [];
const filesGiven = parsedArgs._.length > 0;
const filesToApply = filesGiven ? [] : ['**/*.md'];
if (filesGiven) {
// We need to take all the flag-less arguments (the files that should be linted)
// and filter out the ones that aren't md files. Otherwise json or css files
// may be passed through, cause of pre-commit hook for example
args = args.filter(a => parsedArgs._.includes(a) === false || isMarkdownFile(a));
}
const result = spawn.sync(resolveBin('markdownlint'), [...config, ...ignore, ...args, ...filesToApply], {
stdio: 'inherit'
});
process.exit(result.status);