UNPKG

@theintern/dev

Version:

Development support scripts for Intern projects.

195 lines 6.3 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var child_process_1 = require("child_process"); var chokidar_1 = require("chokidar"); var path_1 = require("path"); var chalk_1 = tslib_1.__importDefault(require("chalk")); var shelljs_1 = require("shelljs"); var glob_1 = require("glob"); var common_1 = require("./common"); var args = process.argv.slice(2); var watchMode = args[0] === 'watch'; if (common_1.internDev.stylus) { try { var stylus = require.resolve('stylus/bin/stylus'); if (watchMode) { var proc = child_process_1.spawn('node', tslib_1.__spreadArrays([stylus], common_1.internDev.stylus, ['--watch'])); watchProcess('stylus', proc); } else { var proc = child_process_1.spawnSync('node', tslib_1.__spreadArrays([stylus], common_1.internDev.stylus)); logProcess('stylus', proc); } } catch (error) { handleError(error); } } var buildDst = path_1.join(common_1.buildDir, 'src'); var resources = common_1.internDev.resources || {}; resources[buildDst] = (resources[buildDst] || []).concat([ 'package.json', 'eslint.config.js', 'README*', 'LICENSE*', ]); try { Object.keys(resources).forEach(function (dest) { common_1.copyAll(resources[dest], dest); if (watchMode) { createFileWatcher(resources[dest], dest); } }); } catch (error) { handleError(error); } try { common_1.getConfigs().forEach(function (tsconfig) { common_1.log("Linting " + path_1.dirname(tsconfig)); common_1.lint(); common_1.log("Compiling " + path_1.dirname(tsconfig)); var tag = "tsc:" + path_1.dirname(tsconfig); var tsc = require.resolve('typescript/bin/tsc'); if (watchMode) { var proc = child_process_1.spawn('node', [tsc, '-p', tsconfig, '--watch']); watchProcess(tag, proc, /\berror TS\d+:/); } else { var proc = child_process_1.spawnSync('node', [tsc, '-p', tsconfig]); logProcess(tag, proc, /\berror TS\d+:/); } }); } catch (error) { handleError(error); } var webpackConfig = glob_1.sync(common_1.internDev.webpack || 'webpack.config.*')[0]; if (webpackConfig) { try { var webpack = void 0; try { webpack = require.resolve('webpack-cli/bin/webpack'); } catch (error) { webpack = require.resolve('webpack/bin/webpack'); } if (watchMode) { var proc = child_process_1.spawn('node', [ webpack, '--config', webpackConfig, '--watch', ]); watchProcess('webpack', proc, /^ERROR\b/); } else { var proc = child_process_1.spawnSync('node', [webpack, '--config', webpackConfig]); logProcess('webpack', proc, /^ERROR\b/); } } catch (error) { handleError(error); } } common_1.log('Done building'); function createFileWatcher(patterns, dstDir) { if (!Array.isArray(dstDir)) { dstDir = [dstDir]; } dstDir.forEach(function (dir) { return shelljs_1.mkdir('-p', path_1.dirname(dir)); }); var watcher = chokidar_1.watch(patterns) .on('ready', function () { common_1.log("Watching files for " + patterns[0] + " => " + JSON.stringify(dstDir)); watcher.on('add', function (file) { return copy(file, dstDir); }); watcher.on('change', function (file) { return copy(file, dstDir); }); watcher.on('unlink', function (file) { return remove(file, dstDir); }); }) .on('error', function (error) { common_1.log(chalk_1.default.red('!!'), 'Watcher error:', error); }); return watcher; } function copy(file, dstDir) { if (!Array.isArray(dstDir)) { dstDir = [dstDir]; } dstDir.forEach(function (dir) { common_1.copyFile(file, dir); common_1.log("Copied " + file + " -> " + dir); }); } function handleError(error) { if (error.name === 'ExecError') { common_1.log(chalk_1.default.red(error.stderr || error.stdout)); process.exit(error.code); } else { throw error; } } function logProcess(name, proc, errorTest) { if (proc.status) { logProcessOutput(name, proc.stdout || proc.stderr, /.*/); common_1.log(chalk_1.default.red("Error running " + name + ", exiting...")); process.exit(1); } else { logProcessOutput(name, proc.stdout, errorTest); } } function logProcessOutput(name, text, errorTest) { if (!text) { return; } if (typeof text !== 'string') { text = text.toString('utf8'); } var lines = text .split('\n') .filter(function (line) { return !/^\s*$/.test(line); }) .filter(function (line) { return !/^Child$/.test(line); }) .map(function (line) { return line.replace(/\s+$/, ''); }) .map(function (line) { return /^\d\d:\d\d:\d\d \w\w -/.test(line) ? line.slice(line.indexOf('-') + 2) : line; }); if (errorTest) { lines = lines.map(function (line) { return errorTest.test(line) ? chalk_1.default.red(line) : line; }); } lines.forEach(function (line) { common_1.log("[" + name + "] " + line); }); } function remove(file, dstDir) { if (!Array.isArray(dstDir)) { dstDir = [dstDir]; } dstDir.forEach(function (dir) { try { var path = path_1.join(dir, file); shelljs_1.rm(path); common_1.log("Removed " + path); } catch (error) { } }); } function watchProcess(name, proc, errorTest) { var _a, _b; (_a = proc.stdout) === null || _a === void 0 ? void 0 : _a.on('data', function (data) { logProcessOutput(name, data.toString('utf8'), errorTest); }); (_b = proc.stderr) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { logProcessOutput(name, data.toString('utf8'), errorTest); }); proc.on('error', function () { process.exit(1); }); } //# sourceMappingURL=intern-dev-build.js.map