lib/ex_tracer/module_index.ex

defmodule ExTracer.ModuleIndex do
  @moduledoc false

  @module Foundry.Context.Scenarios.ModuleIndex

  def resolve_optional_node_id(node_name, lookup),
    do: maybe_apply(:resolve_optional_node_id, [node_name, lookup])

  def normalize_focus_override(focus_value, node_id, lookup),
    do: maybe_apply(:normalize_focus_override, [focus_value, node_id, lookup])

  def resolve_step_focus(node_id, step_name, lookup),
    do: maybe_apply(:resolve_step_focus, [node_id, step_name, lookup])

  def entry_point_level(entry_point, lookup),
    do: maybe_apply(:entry_point_level, [entry_point, lookup])

  def explicit_focus_targets(step, lookup),
    do: maybe_apply(:explicit_focus_targets, [step, lookup]) || []

  defp maybe_apply(fun, args) do
    if Code.ensure_loaded?(@module) and function_exported?(@module, fun, length(args)) do
      apply(@module, fun, args)
    end
  end
end