1mod component;
2mod css;
3mod oxc;
4mod scan;
5
6use crate::ast::{CssAst, modern::CssNode};
7use crate::error::CompileError;
8pub use component::modern::{
9 attach_estree_comments_to_tree, attach_leading_comments_to_expression,
10 attach_trailing_comments_to_expression, estree_value_to_usize, expression_literal_bool,
11 expression_literal_string, find_matching_brace_close, legacy_expression_from_modern_expression,
12 line_column_at_offset, modern_empty_identifier_expression, named_children_vec,
13 normalize_estree_node, normalize_pattern_template_elements, parse_all_comment_nodes,
14 parse_leading_comment_nodes, parse_modern_expression_from_text, parse_modern_expression_tag,
15 position_raw_node,
16};
17pub use component::{
18 AttributeKind, ElementKind, SvelteElementKind, classify_attribute_name, classify_element_name,
19 is_component_name, is_custom_element_name, is_valid_component_name, is_valid_element_name,
20 is_void_element_name,
21};
22pub use component::{ParseMode, ParseOptions, parse, parse_modern_root};
23pub use component::{
24 RawField, estree_node_field, estree_node_field_array, estree_node_field_mut,
25 estree_node_field_object, estree_node_field_str, estree_node_has_field, estree_node_type,
26 expression_identifier_name, modern_node_end, modern_node_span, modern_node_start,
27 walk_estree_node, walk_raw_value,
28};
29pub(crate) use scan::find_valid_legacy_closing_tag_start;
30pub use scan::parse_svelte_ignores;
31
32pub fn parse_css(source: &str) -> Result<CssAst, CompileError> {
33 css::parse_css_stylesheet(source)
34}
35
36pub fn parse_modern_css_nodes(source: &str, start: usize, end: usize) -> Vec<CssNode> {
37 css::parse_modern_css_nodes(source, start, end)
38}
39
40pub(crate) fn parse_modern_program_content_with_offsets(
41 snippet: &str,
42 global_start: usize,
43 start_line: usize,
44 start_column: usize,
45 end_line: usize,
46 end_column: usize,
47 is_ts: bool,
48) -> Option<crate::ast::modern::EstreeNode> {
49 oxc::SvelteOxcParser::new(snippet)
50 .with_offsets(oxc::OxcProgramOffsets {
51 global_start,
52 start_line,
53 start_column,
54 end_line,
55 end_column,
56 })
57 .parse_program_for_compile(is_ts)
58}
59
60pub(crate) fn parse_modern_expression_with_oxc(
61 expression: &str,
62 global_start: usize,
63 base_line: usize,
64 base_column: usize,
65) -> Option<crate::ast::modern::Expression> {
66 oxc::SvelteOxcParser::new(expression)
67 .with_offsets(oxc::OxcProgramOffsets {
68 global_start,
69 start_line: base_line,
70 start_column: base_column,
71 end_line: base_line,
72 end_column: base_column + expression.len(),
73 })
74 .parse_expression_for_template()
75}
76
77pub(crate) fn parse_modern_expression_error_with_oxc(
78 expression: &str,
79 global_start: usize,
80 base_line: usize,
81 base_column: usize,
82) -> Option<std::sync::Arc<str>> {
83 oxc::SvelteOxcParser::new(expression)
84 .with_offsets(oxc::OxcProgramOffsets {
85 global_start,
86 start_line: base_line,
87 start_column: base_column,
88 end_line: base_line,
89 end_column: base_column + expression.len(),
90 })
91 .parse_expression_error_for_template()
92}
93
94pub(crate) fn parse_modern_expression_error_detail_with_oxc(
95 expression: &str,
96 global_start: usize,
97 base_line: usize,
98 base_column: usize,
99) -> Option<(usize, std::sync::Arc<str>)> {
100 oxc::SvelteOxcParser::new(expression)
101 .with_offsets(oxc::OxcProgramOffsets {
102 global_start,
103 start_line: base_line,
104 start_column: base_column,
105 end_line: base_line,
106 end_column: base_column + expression.len(),
107 })
108 .parse_expression_error_detail_for_template()
109}