use serde::{Deserialize, Serialize};
use vize_carton::String;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u8)]
pub enum NodeType {
Root = 0,
Element = 1,
Text = 2,
Comment = 3,
SimpleExpression = 4,
Interpolation = 5,
Attribute = 6,
Directive = 7,
CompoundExpression = 8,
If = 9,
IfBranch = 10,
For = 11,
TextCall = 12,
VNodeCall = 13,
JsCallExpression = 14,
JsObjectExpression = 15,
JsProperty = 16,
JsArrayExpression = 17,
JsFunctionExpression = 18,
JsConditionalExpression = 19,
JsCacheExpression = 20,
JsBlockStatement = 21,
JsTemplateLiteral = 22,
JsIfStatement = 23,
JsAssignmentExpression = 24,
JsSequenceExpression = 25,
JsReturnStatement = 26,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[repr(u8)]
pub enum ElementType {
#[default]
Element = 0,
Component = 1,
Slot = 2,
Template = 3,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[repr(u8)]
pub enum Namespace {
#[default]
Html = 0,
Svg = 1,
MathMl = 2,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, Default,
)]
#[repr(u8)]
pub enum ConstantType {
#[default]
NotConstant = 0,
CanSkipPatch = 1,
CanCache = 2,
CanStringify = 3,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
pub struct Position {
pub offset: u32,
pub line: u32,
pub column: u32,
}
impl Position {
pub const fn new(offset: u32, line: u32, column: u32) -> Self {
Self {
offset,
line,
column,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct SourceLocation {
pub start: Position,
pub end: Position,
pub source: String,
}
impl Default for SourceLocation {
fn default() -> Self {
Self::STUB
}
}
pub(crate) static STUB_LOCATION: SourceLocation = SourceLocation {
start: Position {
offset: 0,
line: 1,
column: 1,
},
end: Position {
offset: 0,
line: 1,
column: 1,
},
source: String::const_new(""),
};
impl SourceLocation {
pub const STUB: Self = Self {
start: Position {
offset: 0,
line: 1,
column: 1,
},
end: Position {
offset: 0,
line: 1,
column: 1,
},
source: String::const_new(""),
};
pub fn new(start: Position, end: Position, source: impl Into<String>) -> Self {
Self {
start,
end,
source: source.into(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
#[repr(u8)]
pub enum RuntimeHelper {
Fragment,
Teleport,
Suspense,
KeepAlive,
BaseTransition,
Transition,
TransitionGroup,
OpenBlock,
CreateBlock,
CreateElementBlock,
CreateVNode,
CreateElementVNode,
CreateComment,
CreateText,
CreateStatic,
ResolveComponent,
ResolveDynamicComponent,
ResolveDirective,
ResolveFilter,
WithDirectives,
RenderList,
RenderSlot,
CreateSlots,
ToDisplayString,
MergeProps,
NormalizeClass,
NormalizeStyle,
NormalizeProps,
GuardReactiveProps,
ToHandlers,
Camelize,
Capitalize,
ToHandlerKey,
SetBlockTracking,
PushScopeId,
PopScopeId,
WithCtx,
Unref,
IsRef,
WithMemo,
IsMemoSame,
VShow,
VModelText,
VModelCheckbox,
VModelRadio,
VModelSelect,
VModelDynamic,
WithModifiers,
WithKeys,
SsrInterpolate,
SsrRenderVNode,
SsrRenderComponent,
SsrRenderSlot,
SsrRenderSlotInner,
SsrRenderAttrs,
SsrRenderAttr,
SsrRenderDynamicAttr,
SsrIncludeBooleanAttr,
SsrRenderClass,
SsrRenderStyle,
SsrRenderDynamicModel,
SsrGetDynamicModelProps,
SsrRenderList,
SsrLooseEqual,
SsrLooseContain,
SsrGetDirectiveProps,
SsrRenderTeleport,
SsrRenderSuspense,
}
impl RuntimeHelper {
pub fn name(&self) -> &'static str {
match self {
Self::Fragment => "Fragment",
Self::Teleport => "Teleport",
Self::Suspense => "Suspense",
Self::KeepAlive => "KeepAlive",
Self::BaseTransition => "BaseTransition",
Self::Transition => "Transition",
Self::TransitionGroup => "TransitionGroup",
Self::OpenBlock => "openBlock",
Self::CreateBlock => "createBlock",
Self::CreateElementBlock => "createElementBlock",
Self::CreateVNode => "createVNode",
Self::CreateElementVNode => "createElementVNode",
Self::CreateComment => "createCommentVNode",
Self::CreateText => "createTextVNode",
Self::CreateStatic => "createStaticVNode",
Self::ResolveComponent => "resolveComponent",
Self::ResolveDynamicComponent => "resolveDynamicComponent",
Self::ResolveDirective => "resolveDirective",
Self::ResolveFilter => "resolveFilter",
Self::WithDirectives => "withDirectives",
Self::RenderList => "renderList",
Self::RenderSlot => "renderSlot",
Self::CreateSlots => "createSlots",
Self::ToDisplayString => "toDisplayString",
Self::MergeProps => "mergeProps",
Self::NormalizeClass => "normalizeClass",
Self::NormalizeStyle => "normalizeStyle",
Self::NormalizeProps => "normalizeProps",
Self::GuardReactiveProps => "guardReactiveProps",
Self::ToHandlers => "toHandlers",
Self::Camelize => "camelize",
Self::Capitalize => "capitalize",
Self::ToHandlerKey => "toHandlerKey",
Self::SetBlockTracking => "setBlockTracking",
Self::PushScopeId => "pushScopeId",
Self::PopScopeId => "popScopeId",
Self::WithCtx => "withCtx",
Self::Unref => "unref",
Self::IsRef => "isRef",
Self::WithMemo => "withMemo",
Self::IsMemoSame => "isMemoSame",
Self::VShow => "vShow",
Self::VModelText => "vModelText",
Self::VModelCheckbox => "vModelCheckbox",
Self::VModelRadio => "vModelRadio",
Self::VModelSelect => "vModelSelect",
Self::VModelDynamic => "vModelDynamic",
Self::WithModifiers => "withModifiers",
Self::WithKeys => "withKeys",
Self::SsrInterpolate => "ssrInterpolate",
Self::SsrRenderVNode => "ssrRenderVNode",
Self::SsrRenderComponent => "ssrRenderComponent",
Self::SsrRenderSlot => "ssrRenderSlot",
Self::SsrRenderSlotInner => "ssrRenderSlotInner",
Self::SsrRenderAttrs => "ssrRenderAttrs",
Self::SsrRenderAttr => "ssrRenderAttr",
Self::SsrRenderDynamicAttr => "ssrRenderDynamicAttr",
Self::SsrIncludeBooleanAttr => "ssrIncludeBooleanAttr",
Self::SsrRenderClass => "ssrRenderClass",
Self::SsrRenderStyle => "ssrRenderStyle",
Self::SsrRenderDynamicModel => "ssrRenderDynamicModel",
Self::SsrGetDynamicModelProps => "ssrGetDynamicModelProps",
Self::SsrRenderList => "ssrRenderList",
Self::SsrLooseEqual => "ssrLooseEqual",
Self::SsrLooseContain => "ssrLooseContain",
Self::SsrGetDirectiveProps => "ssrGetDirectiveProps",
Self::SsrRenderTeleport => "ssrRenderTeleport",
Self::SsrRenderSuspense => "ssrRenderSuspense",
}
}
pub fn is_ssr(&self) -> bool {
matches!(
self,
Self::SsrInterpolate
| Self::SsrRenderVNode
| Self::SsrRenderComponent
| Self::SsrRenderSlot
| Self::SsrRenderSlotInner
| Self::SsrRenderAttrs
| Self::SsrRenderAttr
| Self::SsrRenderDynamicAttr
| Self::SsrIncludeBooleanAttr
| Self::SsrRenderClass
| Self::SsrRenderStyle
| Self::SsrRenderDynamicModel
| Self::SsrGetDynamicModelProps
| Self::SsrRenderList
| Self::SsrLooseEqual
| Self::SsrLooseContain
| Self::SsrGetDirectiveProps
| Self::SsrRenderTeleport
| Self::SsrRenderSuspense
)
}
}
#[derive(Debug)]
pub struct ImportItem<'a> {
pub exp: vize_carton::Box<'a, super::SimpleExpressionNode<'a>>,
pub path: String,
}