posthog_cli/commands/sourcemap/
inject.rs

1use anyhow::{anyhow, bail, Ok, Result};
2use std::path::Path;
3use tracing::info;
4use uuid;
5
6use crate::utils::{posthog::capture_command_invoked, sourcemaps::read_pairs};
7
8pub fn inject(directory: &Path, ignore_globs: &[String]) -> Result<()> {
9    let capture_handle = capture_command_invoked("sourcemap_inject", None::<&str>);
10    let directory = directory.canonicalize().map_err(|e| {
11        anyhow!(
12            "Directory '{}' not found or inaccessible: {}",
13            directory.display(),
14            e
15        )
16    })?;
17    info!("Processing directory: {}", directory.display());
18    let mut pairs = read_pairs(&directory, ignore_globs)?;
19    if pairs.is_empty() {
20        bail!("No source files found");
21    }
22    info!("Found {} pairs", pairs.len());
23    let mut skipped_pairs = 0;
24    for pair in &mut pairs {
25        if pair.has_chunk_id() {
26            skipped_pairs += 1;
27            continue;
28        }
29        let chunk_id = uuid::Uuid::now_v7().to_string();
30        pair.set_chunk_id(chunk_id)?;
31    }
32    if skipped_pairs > 0 {
33        info!(
34            "Skipped {} pairs because chunk IDs already exist",
35            skipped_pairs
36        );
37    }
38
39    // Write the source and sourcemaps back to disk
40    for pair in &pairs {
41        pair.save()?;
42    }
43    info!("Finished processing directory");
44    let _ = capture_handle.join();
45    Ok(())
46}