use std::path::PathBuf;
use super::bundle::{TraceClock, TraceLimits, TraceProblem};
use super::jsonfmt::JsonObject;
use super::links::TraceLinksOptions;
use super::redaction::TracePrivacyOptions;
use super::schema::TraceMode;
pub const DEFAULT_CAPTURE_TIMEOUT_MS: u64 = 15_000;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum TraceScreenshots {
Off,
#[default]
Checkpoints,
OnlyOnFailure,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TraceInitialCheckpoint {
Skip,
Take,
Named(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TraceDomOptions {
pub html: bool,
pub live_control_state: bool,
pub live_state: bool,
pub mutations: Option<bool>,
pub open_shadow_roots: bool,
}
impl Default for TraceDomOptions {
fn default() -> Self {
Self {
html: true,
live_control_state: true,
live_state: true,
mutations: None,
open_shadow_roots: true,
}
}
}
#[derive(Clone)]
pub struct TraceOptions {
pub output: PathBuf,
pub mode: String,
pub initial_checkpoint: Option<TraceInitialCheckpoint>,
pub screenshots: TraceScreenshots,
pub dom: TraceDomOptions,
pub events: Option<Vec<String>>,
pub privacy: TracePrivacyOptions,
pub limits: TraceLimits,
pub links: Option<TraceLinksOptions>,
pub strict: bool,
pub capture_timeout_ms: u64,
pub commander_version: Option<String>,
pub engine: Option<String>,
pub clock: TraceClock,
}
impl TraceOptions {
pub fn new(output: impl Into<PathBuf>) -> Self {
Self {
output: output.into(),
mode: TraceMode::CHECKPOINTS.to_string(),
initial_checkpoint: None,
screenshots: TraceScreenshots::default(),
dom: TraceDomOptions::default(),
events: None,
privacy: TracePrivacyOptions::default(),
limits: TraceLimits::default(),
links: None,
strict: false,
capture_timeout_ms: DEFAULT_CAPTURE_TIMEOUT_MS,
commander_version: Some(env!("CARGO_PKG_VERSION").to_string()),
engine: None,
clock: TraceClock::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct TraceCheckpointOptions {
pub actor: Option<String>,
pub reason: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceFailure {
pub message: String,
pub stack: Option<String>,
}
impl TraceFailure {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
stack: None,
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct TraceStopOptions {
pub discard: bool,
pub error: Option<TraceFailure>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TraceResult {
pub path: PathBuf,
pub manifest: JsonObject,
pub checkpoints: Vec<JsonObject>,
pub problems: Vec<TraceProblem>,
pub links: Option<PathBuf>,
pub discarded: bool,
}