posthog_cli/commands/sourcemap/
inject.rs1use 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 for pair in &pairs {
41 pair.save()?;
42 }
43 info!("Finished processing directory");
44 let _ = capture_handle.join();
45 Ok(())
46}