Skip to main content

source_map_tauri/
scan.rs

1use anyhow::Result;
2
3use crate::{
4    config::ResolvedConfig,
5    discovery, frontend, linker,
6    model::{ArtifactDoc, EdgeDoc, ProjectInfo, ScanSummary, WarningDoc},
7    output, r#rust,
8    security::apply_artifact_security,
9    tauri_config,
10};
11
12pub struct ScanBundle {
13    pub artifacts: Vec<ArtifactDoc>,
14    pub edges: Vec<EdgeDoc>,
15    pub warnings: Vec<WarningDoc>,
16    pub summary: ScanSummary,
17    pub project_info: ProjectInfo,
18}
19
20pub fn scan_project(config: &ResolvedConfig) -> Result<ScanBundle> {
21    let discovery = discovery::discover(config)?;
22
23    let mut artifacts = Vec::new();
24    let mut warnings = Vec::new();
25
26    let (frontend_artifacts, frontend_warnings) = frontend::extract(config, &discovery)?;
27    artifacts.extend(frontend_artifacts);
28    warnings.extend(frontend_warnings);
29    artifacts.extend(r#rust::extract(config, &discovery)?);
30    artifacts.extend(tauri_config::extract(config, &discovery)?);
31
32    for artifact in &mut artifacts {
33        artifact.has_related_tests = !artifact.related_tests.is_empty();
34        apply_artifact_security(artifact);
35    }
36
37    let edges = linker::link(&mut artifacts, &mut warnings)?;
38    let summary = output::build_summary(&config.repo, &artifacts, &edges, &warnings);
39    let project_info = ProjectInfo {
40        repo: config.repo.clone(),
41        repo_path: config.root.to_string_lossy().to_string(),
42        output_dir: config.output_dir.to_string_lossy().to_string(),
43        index_uid: config.file.meilisearch.index.clone(),
44        artifact_count: summary.artifact_count,
45        edge_count: summary.edge_count,
46        warning_count: summary.warning_count,
47        scanned_at: summary.scanned_at.clone(),
48    };
49
50    Ok(ScanBundle {
51        artifacts,
52        edges,
53        warnings,
54        summary,
55        project_info,
56    })
57}