Skip to main content

svelte_compiler/
lib.rs

1//! Svelte compiler APIs for parsing, printing, preprocessing, migration, and
2//! JavaScript/CSS code generation.
3//!
4//! # Examples
5//!
6//! Compile a component:
7//!
8//! ```
9//! use svelte_compiler::{CompileOptions, compile};
10//!
11//! let result = compile(
12//!     "<script>let name = 'world';</script><h1>Hello {name}</h1>",
13//!     CompileOptions::default(),
14//! )?;
15//!
16//! assert!(result.js.code.contains("Hello"));
17//! # Ok::<(), svelte_compiler::CompileError>(())
18//! ```
19//!
20//! Parse and print a modern AST:
21//!
22//! ```
23//! use svelte_compiler::{ModernPrintTarget, ParseMode, ParseOptions, PrintOptions, parse, print_modern};
24//!
25//! let document = parse(
26//!     "<button class='primary'>save</button>",
27//!     ParseOptions {
28//!         mode: ParseMode::Modern,
29//!         ..ParseOptions::default()
30//!     },
31//! )?;
32//!
33//! let root = match &document.root {
34//!     svelte_compiler::ast::Root::Modern(root) => root,
35//!     svelte_compiler::ast::Root::Legacy(_) => unreachable!("requested a modern AST"),
36//! };
37//! let printed = print_modern(ModernPrintTarget::root(document.source(), root), PrintOptions::default())?;
38//! assert!(printed.code.contains("<button"));
39//! # Ok::<(), svelte_compiler::CompileError>(())
40//! ```
41mod api;
42pub mod ast;
43mod compiler;
44pub mod cst;
45mod error;
46mod js;
47mod names;
48mod primitives;
49mod printing;
50mod source;
51
52pub use api::{
53    AsyncMarkupPreprocessor, AsyncTagPreprocessor, CompatibilityComponentApi, CompatibilityOptions,
54    CompileMetadata, CompileOptions, CompileResult, Compiler, CssHashGetterCallback, CssHashInput,
55    CssOutputMode, ErrorMode, ExperimentalOptions, FragmentStrategy, GenerateTarget,
56    MarkupPreprocessor, MigrateOptions, MigrateResult, ModernPrintTarget, Namespace,
57    OutputArtifact, ParseMode, ParseOptions, PreprocessAttribute, PreprocessAttributeValue,
58    PreprocessAttributes, PreprocessMarkup, PreprocessOptions, PreprocessOutput, PreprocessResult,
59    PreprocessTag, PreprocessorGroup, PrintOptions, PrintedOutput, SourceMap, TagPreprocessor,
60    VERSION, Warning, WarningFilterCallback,
61};
62pub use cst::parse_svelte;
63pub use error::{CompileError, DiagnosticKind, LineColumn, SourcePosition};
64pub use primitives::{BytePos, SourceId, Span};
65pub use source::SourceText;
66
67/// Parse a component into the public Svelte AST.
68pub fn parse(source: &str, options: ParseOptions) -> Result<ast::Document, CompileError> {
69    compiler::phases::parse::parse_component(source, options)
70}
71
72/// Print a parsed document back to Svelte source.
73pub fn print(ast: &ast::Document, options: PrintOptions) -> Result<PrintedOutput, CompileError> {
74    compiler::phases::transform::print_component(ast, options)
75}
76
77/// Print a node from the modern AST back to Svelte source.
78pub fn print_modern(
79    ast: ModernPrintTarget<'_>,
80    options: PrintOptions,
81) -> Result<PrintedOutput, CompileError> {
82    compiler::phases::transform::print_modern_target(ast, options)
83}
84
85/// Compile a `.svelte` component into JavaScript and optional CSS artifacts.
86pub fn compile(source: &str, options: CompileOptions) -> Result<CompileResult, CompileError> {
87    compiler::phases::transform::compile_component(source, options)
88}
89
90/// Compile a JavaScript or TypeScript module that uses runes.
91pub fn compile_module(
92    source: &str,
93    options: CompileOptions,
94) -> Result<CompileResult, CompileError> {
95    compiler::phases::transform::compile_module(source, options)
96}
97
98/// Parse a stylesheet into the public CSS AST.
99pub fn parse_css(source: &str) -> Result<ast::CssAst, CompileError> {
100    compiler::phases::parse::parse_css(source)
101}
102
103/// Run one or more preprocessors over a component source string.
104pub fn preprocess(
105    source: &str,
106    options: PreprocessOptions,
107) -> Result<PreprocessResult, CompileError> {
108    compiler::phases::preprocess::preprocess(source, options)
109}
110
111/// Run one or more preprocessors over a component source string asynchronously.
112pub async fn preprocess_async(
113    source: &str,
114    options: PreprocessOptions,
115) -> Result<PreprocessResult, CompileError> {
116    compiler::phases::preprocess::preprocess_async(source, options).await
117}
118
119/// Attempt a best-effort migration of a component to modern Svelte syntax.
120pub fn migrate(source: &str, options: MigrateOptions) -> Result<MigrateResult, CompileError> {
121    compiler::phases::migrate::migrate(source, options)
122}
123
124/// Compatibility stub for the old JavaScript `walk` export.
125pub fn walk() -> ! {
126    panic!(
127        "'svelte/compiler' no longer exports a `walk` utility — please import it directly from `estree-walker` instead"
128    )
129}