fromArgResults static method

ReplayHarnessConfig fromArgResults(
  1. ArgResults parsed
)

Implementation

static ReplayHarnessConfig fromArgResults(ArgResults parsed) {
  final trace = parsed['replay-trace'] as String?;
  final scenario = parsed['replay-scenario'] as String?;
  if (trace != null && scenario != null) {
    return const ReplayHarnessConfig(
      scenarioPath: null,
      tracePath: null,
      scriptFilter: '',
      sessionOut: '',
      scenarioOut: null,
      scenarioName: 'replay',
      scenarioDescription: 'Generated from trace',
      speed: 1,
      minSleepUs: 30000,
      leadInMs: 3500,
      screenWidth: 0,
      screenHeight: 0,
      fixedRightWidth: 0,
      blockInput: false,
      loop: false,
      keepOpen: false,
      timeoutSeconds: 180,
      convertOnly: false,
      captureTrace: false,
      traceOut: '',
      traceTags: '',
      captureDispatch: false,
      summaryCount: 0,
      maxSpanUs: 0,
      traceFromUs: null,
      traceToUs: null,
      traceIncludeHoverMoves: false,
      error: 'Use only one: --replay-scenario or --replay-trace.',
    );
  }

  final speed = _parseDouble(parsed['replay-speed'], '--replay-speed');
  if (speed case (value: _, error: final err?)) {
    return ReplayHarnessConfig._error(err);
  }

  final minSleep = _parseInt(
    parsed['replay-trace-min-sleep-us'],
    '--replay-trace-min-sleep-us',
  );
  final leadInMs = _parseOptionalInt(parsed['replay-lead-in-ms'], 3500);
  final screenWidth = _parseInt(
    parsed['replay-trace-screen-width'],
    '--replay-trace-screen-width',
  );
  final screenHeight = _parseInt(
    parsed['replay-trace-screen-height'],
    '--replay-trace-screen-height',
  );
  final fixedRightWidth = _parseInt(
    parsed['replay-trace-fixed-right-width'],
    '--replay-trace-fixed-right-width',
  );
  final timeoutSeconds = _parseInt(
    parsed['replay-timeout-seconds'],
    '--replay-timeout-seconds',
  );

  final normalizedTrace = _blankToNull(trace);
  final normalizedScenario = _blankToNull(scenario);
  final scenarioOut = _blankToNull(parsed['replay-scenario-out'] as String?);
  final scenarioName = parsed['replay-scenario-name'] as String?;
  final scenarioDesc = parsed['replay-scenario-description'] as String?;

  String resolveName(String? value) {
    final trimmed = value?.trim();
    return (trimmed == null || trimmed.isEmpty) ? 'replay' : trimmed;
  }

  String resolveDesc(String? value) {
    final trimmed = value?.trim();
    return (trimmed == null || trimmed.isEmpty)
        ? 'Generated from trace'
        : trimmed;
  }

  final traceFromUs = _parseOptionalIntOrNull(parsed['replay-trace-from-us']);
  final traceToUs = _parseOptionalIntOrNull(parsed['replay-trace-to-us']);

  return ReplayHarnessConfig(
    scenarioPath: normalizedScenario.isEmpty ? null : normalizedScenario,
    tracePath: normalizedTrace.isEmpty ? null : normalizedTrace,
    scriptFilter: (parsed['replay-script-filter'] as String?) ?? 'bin/*.dart',
    sessionOut:
        (parsed['replay-session-out'] as String?) ??
        '.dart_tool/replay/session.log',
    scenarioOut: scenarioOut.isEmpty ? null : scenarioOut,
    scenarioName: resolveName(scenarioName),
    scenarioDescription: resolveDesc(scenarioDesc),
    speed: speed.value,
    minSleepUs: minSleep.value,
    leadInMs: leadInMs,
    screenWidth: screenWidth.value,
    screenHeight: screenHeight.value,
    fixedRightWidth: fixedRightWidth.value,
    blockInput: parsed['replay-block-input'] == true,
    loop: parsed['replay-loop'] == true,
    keepOpen: parsed['replay-keep-open'] == true,
    timeoutSeconds: timeoutSeconds.value,
    convertOnly: parsed['replay-convert-only'] == true,
    captureTrace: parsed['replay-capture-trace'] != false,
    traceOut:
        (parsed['replay-trace-out'] as String?) ??
        '.dart_tool/replay/trace.log',
    traceTags:
        (parsed['replay-trace-tags'] as String?) ??
        'general,render,layout,paint,scroll',
    captureDispatch: parsed['replay-capture-dispatch'] == true,
    summaryCount:
        int.tryParse((parsed['replay-summary-count'] as String?) ?? '12') ??
        12,
    maxSpanUs:
        int.tryParse((parsed['replay-max-span-us'] as String?) ?? '0') ?? 0,
    traceFromUs: traceFromUs,
    traceToUs: traceToUs,
    traceIncludeHoverMoves: parsed['replay-trace-include-hover'] == true,
    error: null,
  );
}