UNPKG

kcd-scripts

Version:

CLI for common scripts for my projects

77 lines (60 loc) 2.55 kB
"use strict"; const path = require('path'); const { DEFAULT_EXTENSIONS } = require('@babel/core'); const spawn = require('cross-spawn'); const yargsParser = require('yargs-parser'); const rimraf = require('rimraf'); const glob = require('glob'); const { hasPkgProp, fromRoot, resolveBin, hasFile, hasTypescript, generateTypeDefs } = require('../../utils'); let args = process.argv.slice(2); const here = p => path.join(__dirname, p); const parsedArgs = yargsParser(args); const useBuiltinConfig = !args.includes('--presets') && !hasFile('.babelrc') && !hasFile('.babelrc.js') && !hasFile('babel.config.js') && !hasPkgProp('babel'); const config = useBuiltinConfig ? ['--presets', here('../../config/babelrc.js')] : []; const extensions = args.includes('--extensions') || args.includes('--x') ? [] : ['--extensions', [...DEFAULT_EXTENSIONS, '.ts', '.tsx']]; const builtInIgnore = '**/__tests__/**,**/__mocks__/**'; const ignore = args.includes('--ignore') ? [] : ['--ignore', builtInIgnore]; const copyFiles = args.includes('--no-copy-files') ? [] : ['--copy-files']; const useSpecifiedOutDir = args.includes('--out-dir'); const builtInOutDir = 'dist'; const outDir = useSpecifiedOutDir ? [] : ['--out-dir', builtInOutDir]; const noTypeDefinitions = args.includes('--no-ts-defs'); if (!useSpecifiedOutDir && !args.includes('--no-clean')) { rimraf.sync(fromRoot('dist')); } else { args = args.filter(a => a !== '--no-clean'); } if (noTypeDefinitions) { args = args.filter(a => a !== '--no-ts-defs'); } function go() { let result = spawn.sync(resolveBin('@babel/cli', { executable: 'babel' }), [...outDir, ...copyFiles, ...ignore, ...extensions, ...config, 'src'].concat(args), { stdio: 'inherit' }); if (result.status !== 0) return result.status; const pathToOutDir = fromRoot(parsedArgs.outDir || builtInOutDir); if (hasTypescript && !noTypeDefinitions) { console.log('Generating TypeScript definitions'); result = generateTypeDefs(pathToOutDir); console.log('TypeScript definitions generated'); if (result.status !== 0) return result.status; } // because babel will copy even ignored files, we need to remove the ignored files const ignoredPatterns = (parsedArgs.ignore || builtInIgnore).split(',').map(pattern => path.join(pathToOutDir, pattern)); const ignoredFiles = ignoredPatterns.reduce((all, pattern) => [...all, ...glob.sync(pattern)], []); ignoredFiles.forEach(ignoredFile => { rimraf.sync(ignoredFile); }); return result.status; } process.exit(go());