function splitArgv(argv) {
  const aliases = extractKnownKeys(testCommandArgs);
  const isDetoxArg = (_value, key) => key === '$0' || aliases.has(key);

  const detoxArgs = _.pickBy(argv, isDetoxArg);
  const runnerArgv = _.omitBy(argv, isDetoxArg);
  runnerArgv._ = runnerArgv._.slice(1); // omit 'test' string, as in 'detox test'
  if (typeof detoxArgs['debug-synchronization'] === 'string') {
    const erroneousPassthrough = detoxArgs['debug-synchronization'];
    detoxArgs['debug-synchronization'] = 3000;
    runnerArgv._.unshift(erroneousPassthrough);
  }
  if (typeof detoxArgs.repl === 'string' && detoxArgs.repl !== 'auto') {
    runnerArgv._.unshift(detoxArgs.repl);
    detoxArgs.repl = true;
  }

  const runnerArgs = disengageBooleanArgs(runnerArgv, getJestBooleanArgs());
  return { detoxArgs, runnerArgs };
}
@param {Record<string, *>} argv
@returns {{
  detoxArgs: Record<string, *>,
  runnerArgs: Record<string, *>
}}