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}