@tamara027/lerna-terminal
Version:
Powerful cli ui for monorepos
74 lines (63 loc) • 1.98 kB
JavaScript
/* eslint no-console: 0*/
/* eslint complexity: 0*/
;
var path = require('path');
var getScriptCommands = require('../getScriptCommands');
var isIgnoredPackage = require('../isIgnoredPackage');
var runNpmScript = require('../runNpmScript');
var _require = require('../getTerminalPanel'),
getText = _require.getText;
var _require2 = require('../commander'),
getProgram = _require2.getProgram;
var _require3 = require('../store'),
getState = _require3.getState;
var render = require('../render');
var parseText = function parseText(text) {
// eslint-disable-next-line
return text.replace(new RegExp('\x1Bc', 'g'), '').split('\n');
};
/**
* @returns {Object} state
**/
function runNpmScripts() {
var commands = getScriptCommands();
var program = getProgram();
var state = getState();
if (!commands[program.script]) {
throw new Error("the given script wasn't found!");
}
Object.keys(commands[program.script]).forEach(function (index) {
var packagePath = commands[program.script][index];
var packageName = path.basename(packagePath);
if (isIgnoredPackage(packagePath, program.ignoredPackages)) {
return;
}
state[packageName] = {
log: []
};
state[packageName].terminal = runNpmScript({
scriptName: program.script,
packagePath: packagePath,
onRecieve: function onRecieve(text) {
if (text.search('\x1Bc') >= 0) {
state[packageName].log = [];
}
state[packageName].log = state[packageName].log.concat(getText(parseText(text), 'msg'));
render();
},
onError: function onError(text) {
if (text.search('\x1Bc') >= 0) {
state[packageName].log = [];
}
state[packageName].log = state[packageName].log.concat(getText(parseText(text), 'error'));
render();
},
onExit: function onExit() {
state[packageName].log = state[packageName].log.concat(getText('stop: ' + packageName, 'error'));
render();
}
});
});
return state;
}
module.exports = runNpmScripts;