in packages/buck-worker-tool/src/worker-tool.js [191:242]
function readArgsAndExecCommand(
message: CommandMessage,
commands: Commands,
stdout: Writable,
stderr: Writable,
respond: RespondFn,
) {
const {id} = message;
fs.readFile(message.args_path, 'utf8', (readError, argsString) => {
if (readError) {
respond(invalidMessage(id));
return;
}
let commandName;
let args = [];
let structuredArgs = null;
// If it starts with a left brace, we assume it's JSON-encoded. This works
// because the non-JSON encoding always starts the string with the
// command name, thus a letter.
if (argsString[0] === '{') {
({command: commandName, ...structuredArgs} = JSON.parse(argsString));
} else {
// FIXME: if there are files names with escaped
// whitespace, this will not work.
[commandName, ...args] = argsString.split(/\s+/);
}
if (commands.hasOwnProperty(commandName)) {
const command = commands[commandName];
const commandSpecificConsole = new Console(stdout, stderr);
execCommand(
command,
commandName,
argsString,
args,
structuredArgs,
commandSpecificConsole,
respond,
id,
);
} else {
stderr.write(
`This worker does not have a command named \`${commandName}\`. ` +
`Available commands are: ${Object.keys(commands).join(', ')}`,
);
respond(invalidMessage(id));
}
});
}