use crate::query_boundaries::class_type::object_shape_for_type;
use crate::state::CheckerState;
use tsz_solver::TypeId;
impl<'a> CheckerState<'a> {
pub fn get_object_property_type(
&self,
object_type: TypeId,
property_name: &str,
) -> Option<TypeId> {
let shape = object_shape_for_type(self.ctx.types, object_type)?;
let name_atom = self.ctx.types.intern_string(property_name);
shape
.properties
.iter()
.find(|prop| prop.name == name_atom)
.map(|prop| prop.type_id)
}
pub fn object_has_property(&self, object_type: TypeId, property_name: &str) -> bool {
self.get_object_property_type(object_type, property_name)
.is_some()
}
pub fn is_property_optional(&self, object_type: TypeId, property_name: &str) -> bool {
if let Some(shape) = object_shape_for_type(self.ctx.types, object_type) {
let name_atom = self.ctx.types.intern_string(property_name);
shape
.properties
.iter()
.find(|prop| prop.name == name_atom)
.is_some_and(|prop| prop.optional)
} else {
false
}
}
}