@theintern/dev
Version:
Development support scripts for Intern projects.
195 lines • 6.3 kB
JavaScript
;
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