Skip to main content

typst_batch/process/
session.rs

1//! Compile session for tracking file access.
2//!
3//! Encapsulates the side effects of `reset_tracking()` and `collect_accessed_*()`.
4
5use std::path::{Path, PathBuf};
6
7use crate::resource::file::PackageId;
8
9use super::common::{collect_accessed_files, collect_accessed_packages, reset_tracking};
10
11/// Tracks file and package access during compilation/scanning.
12///
13/// Create a session before compilation, then call `finish()` to collect results.
14///
15/// # Example
16///
17/// ```ignore
18/// let session = CompileSession::start();
19/// let result = typst::compile(world);
20/// let deps = session.finish(world.root());
21/// // deps.files and deps.packages now available
22/// ```
23pub struct CompileSession {
24    _private: (),
25}
26
27impl CompileSession {
28    /// Start a new compile session, resetting access tracking.
29    #[inline]
30    pub fn start() -> Self {
31        reset_tracking();
32        Self { _private: () }
33    }
34
35    /// Finish the session and collect accessed files/packages.
36    #[inline]
37    pub fn finish(self, root: &Path) -> AccessedDeps {
38        AccessedDeps {
39            files: collect_accessed_files(root),
40            packages: collect_accessed_packages(),
41        }
42    }
43}
44
45/// Files and packages accessed during compilation/scanning.
46#[derive(Debug, Clone, Default)]
47pub struct AccessedDeps {
48    /// Files accessed during compilation (relative to root).
49    pub files: Vec<PathBuf>,
50    /// Packages accessed during compilation.
51    pub packages: Vec<PackageId>,
52}