UNPKG

@zohodesk/client_build_tool

Version:

A CLI tool to build web applications and client libraries

112 lines (89 loc) 3.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.watchRun = watchRun; var _path = _interopRequireDefault(require("path")); var _watcher = _interopRequireDefault(require("watcher")); var _runBabelForJSFile = require("../babel/runBabelForJSFile"); var _runBabelForTsFile = require("../babel/runBabelForTsFile"); var _runPostCssForCssFile = require("../postcss/runPostCssForCssFile"); var _directoryIterator = require("./directoryIterator"); var _copyFile = require("./copyFile"); var _logger = require("../../logger"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const isJs = ext => ext === '.js'; const isTs = ext => ext === '.ts' || ext === '.tsx'; const isCss = ext => ext === '.css'; function watchRun({ options, src, target, canWatch, mode }) { let updatedFileCount = 0; function doWorkForSeparateFile(filename) { const outputFile = filename.replace(src, target); const { ext } = _path.default.parse(filename); if (isJs(ext)) { (0, _runBabelForJSFile.runBabelForJSFile)({ filename, outputFile, options, mode }); } else if (isCss(ext)) { (0, _runPostCssForCssFile.runPostCssForCssFile)({ filename, outputFile, options }); } else if (isTs(ext)) { (0, _runBabelForTsFile.runBabelForTSFile)({ filename, outputFile, options, mode }); } else { (0, _copyFile.copyFile)(filename, outputFile); } updatedFileCount++; } function doWork(foldername) { updatedFileCount = 0; const startTime = Date.now(); (0, _directoryIterator.directoryIterator)(foldername, filename => { try { doWorkForSeparateFile(filename); } catch (error) { (0, _logger.messageLogger)(`ERROR In: ${filename}`); (0, _logger.messageLogger)(error); } }); (0, _logger.messageLogger)(`Successfully compiled ${updatedFileCount} files with Babel and Post-CSS (${Date.now() - startTime}ms).`); } doWork(src); if (canWatch) { const watcher = new _watcher.default(src, { recursive: true, ignoreInitial: true, ignore: filename => filename.indexOf('__tests__') !== -1 // remove the test cases }); watcher.on('all', (event, filename) => { if (event === 'unlink' || event === 'unlinkDir') { return; } doWork(filename); // This is what the library does internally when you pass it a handler directly // arguments [0] (event); // => could be any target event: 'add', 'addDir', 'change', 'rename', 'renameDir', 'unlink' or 'unlinkDir' // arguments [1] (filename); // => the file system path where the event took place, this is always provided // arguments [2] (targetPathNext); // => the file system path "targetPath" got renamed to, this is only provided on 'rename'/'renameDir' events }); watcher.on('error', error => { (0, _logger.messageLogger)(error); // => true, "Error" instances are always provided on "error" }); } }