use super::SsrFacts;
use crate::decision::{
DecisionBuildError, DecisionTables, NativeAnalysis, build_decisions, policy::TargetPolicy,
};
use vize_l2::{artifact::Artifact, file::FileArtifact};
pub struct NativeSsrFileAnalysis<'owner, 'arena> {
file: &'owner FileArtifact<'arena>,
analysis: NativeAnalysis<'owner, 'arena>,
}
impl<'owner, 'arena> NativeSsrFileAnalysis<'owner, 'arena> {
#[must_use]
pub const fn file(&self) -> &'owner FileArtifact<'arena> {
self.file
}
#[must_use]
pub fn original_attributes(
&self,
) -> Option<&crate::decision::OriginalAttributeFacts<'owner, 'arena>> {
self.analysis.original_attributes()
}
#[must_use]
pub fn artifact(&self) -> &'owner Artifact<'arena> {
self.file.artifact()
}
#[must_use]
pub fn tables(&self) -> &DecisionTables {
self.analysis.tables()
}
#[must_use]
pub fn ssr(&self) -> Option<&SsrFacts<'owner, 'arena>> {
self.analysis.ssr()
}
}
pub fn build_ssr_file_decisions<'owner, 'arena>(
file: &'owner FileArtifact<'arena>,
) -> Result<NativeSsrFileAnalysis<'owner, 'arena>, DecisionBuildError> {
if !file.is_complete() {
return Err(DecisionBuildError::IncompleteFile);
}
let analysis = build_decisions(file.artifact(), TargetPolicy::Ssr)?;
Ok(NativeSsrFileAnalysis { file, analysis })
}
pub(in crate::decision) fn build_original_file_decisions<'owner, 'arena>(
file: &'owner FileArtifact<'arena>,
) -> Result<NativeSsrFileAnalysis<'owner, 'arena>, DecisionBuildError> {
let analysis = crate::decision::build::build_with_original(
file,
TargetPolicy::Ssr,
&crate::decision::dom::LiteralExpressions,
&crate::decision::dom::vue::policy::NoReads,
)?;
Ok(NativeSsrFileAnalysis { file, analysis })
}