mod setup;
pub use setup::{NativeSelectedSetupDomAnalysis, build_native_selected_setup_dom_decisions};
use super::{
DecisionBuildError, DecisionTables, NativeFileAnalysis,
dom::{DomFacts, DomFileExpression, DomFileForHead, DomFileHandler},
policy::TargetPolicy,
};
use vize_l0::id::NodeId;
use vize_l2::{
artifact::Artifact,
file::FileArtifact,
lang::js::{NativeTemplateFile, NativeTemplateView},
};
pub struct NativeTemplateDomAnalysis<'owner, 'arena> {
view: NativeTemplateView<'owner, 'arena>,
analysis: NativeFileAnalysis<'owner, 'arena>,
}
impl<'owner, 'arena> NativeTemplateDomAnalysis<'owner, 'arena> {
#[must_use]
pub fn owner(&self) -> &'owner NativeTemplateFile<'arena> {
self.view.owner()
}
#[must_use]
pub fn file(&self) -> &'owner FileArtifact<'arena> {
self.analysis.file()
}
#[must_use]
pub fn original_attributes(&self) -> Option<&super::OriginalAttributeFacts<'owner, 'arena>> {
self.analysis.original_attributes()
}
#[must_use]
pub fn artifact(&self) -> &'owner Artifact<'arena> {
self.analysis.artifact()
}
#[must_use]
pub fn policy(&self) -> TargetPolicy {
self.analysis.policy()
}
#[must_use]
pub fn tables(&self) -> &DecisionTables {
self.analysis.tables()
}
#[must_use]
pub fn dom(&self) -> Option<&DomFacts<'owner, 'arena>> {
self.analysis.dom()
}
#[must_use]
pub fn expression(&self, node: NodeId) -> Option<&DomFileExpression<'owner, 'arena>> {
self.dom()?.file_expression(node)
}
#[must_use]
pub fn for_head(&self, node: NodeId) -> Option<&DomFileForHead<'owner, 'arena>> {
self.dom()?.file_for_head(node)
}
#[must_use]
pub fn handler(&self, node: NodeId) -> Option<&DomFileHandler<'owner, 'arena>> {
self.dom()?.file_handler(node)
}
}
pub fn build_native_dom_file_decisions<'owner, 'arena>(
view: NativeTemplateView<'owner, 'arena>,
) -> Result<NativeTemplateDomAnalysis<'owner, 'arena>, DecisionBuildError> {
let file = view.file().ok_or(DecisionBuildError::IncompleteFile)?;
let analysis = super::dom::file::build_original_file_decisions(file)?;
Ok(NativeTemplateDomAnalysis { view, analysis })
}