jazelle/utils/execute-project-command.js (61 lines of code) (raw):
// @flow
const {getManifest} = require('../utils/get-manifest.js');
const {getLocalDependencies} = require('../utils/get-local-dependencies.js');
const bazel = require('../utils/bazel-commands.js');
const yarn = require('../utils/yarn-commands.js');
/*::
import type {Stdio} from '../utils/node-helpers.js';
export type ExecuteProjectCommandArgs = {
root: string,
cwd: string,
command: string,
args?: Array<string>,
stdio?: Stdio,
}
export type ExecuteProjectCommand = (ExecuteProjectCommandArgs) => Promise<void>
*/
const executeProjectCommand /*: ExecuteProjectCommand */ = async ({
root,
cwd,
command,
args = [],
stdio = 'inherit',
}) => {
const {projects, workspace} = await getManifest({root});
if (workspace === 'sandbox') {
switch (command) {
case 'dev':
return bazel.dev({root, cwd, args});
case 'test':
return bazel.test({root, cwd, args, stdio});
case 'lint':
return bazel.lint({root, cwd, args, stdio});
case 'flow':
return bazel.flow({root, cwd, args, stdio});
case 'build':
return bazel.build({root, cwd});
case 'start':
return bazel.start({root, cwd, args});
case 'exec':
return bazel.exec({root, cwd, args, stdio});
case 'script': {
const [cmd, ...rest] = args;
return bazel.script({root, cwd, command: cmd, args: rest, stdio});
}
}
} else {
const deps = await getLocalDependencies({
dirs: projects.map(dir => `${root}/${dir}`),
target: cwd,
});
switch (command) {
case 'dev':
return yarn.dev({root, deps, args});
case 'test':
return yarn.test({root, deps, args, stdio});
case 'lint':
return yarn.lint({root, deps, args, stdio});
case 'flow':
return yarn.flow({root, deps, args, stdio});
case 'build':
return yarn.build({root, deps});
case 'start':
return yarn.start({root, deps, args});
case 'exec':
return yarn.exec({root, deps, args, stdio});
case 'script': {
const [cmd, ...rest] = args;
return yarn.script({root, deps, command: cmd, args: rest, stdio});
}
}
}
};
module.exports = {executeProjectCommand};