1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! Low-level TypeScript parsing utilities.
//!
//! This module provides direct access to SWC's TypeScript parser with
//! sensible defaults for the macro system. For most use cases, prefer
//! the higher-level [`TsStream`](crate::TsStream) API or the lowering
//! functions in [`lower`](crate::lower).
//!
//! ## Primary Function
//!
//! - [`parse_ts_module`] - Parse TypeScript source into an SWC [`Module`]
//!
//! ## Example
//!
//! ```rust,no_run
//! use macroforge_ts_syn::parse::parse_ts_module;
//! use macroforge_ts_syn::lower_classes;
//!
//! fn example() -> Result<(), macroforge_ts_syn::TsSynError> {
//! let source = r#"
//! class User {
//! name: string;
//! age: number;
//! }
//! "#;
//!
//! let module = parse_ts_module(source, "input.ts")?;
//!
//! // Now you can use the module with lowering functions
//! let _classes = lower_classes(&module, source)?;
//! Ok(())
//! }
//! ```
//!
//! ## File Type Detection
//!
//! The parser automatically enables TSX support based on the file name:
//! - `*.tsx` - TSX (TypeScript with JSX) mode enabled
//! - `*.ts` or other - Standard TypeScript mode
//!
//! ## Feature Flag
//!
//! This module requires the `swc` feature (enabled by default).
use ;
use ;
use ;
use crateTsSynError;
/// Parses TypeScript source code into an SWC [`Module`] AST.
///
/// This is the primary parsing entry point for the macro system. It configures
/// SWC's parser with appropriate settings for TypeScript:
/// - TypeScript syntax enabled
/// - Decorators enabled (for `@derive` and other decorators)
/// - TSX support auto-detected from file extension
/// - Early errors disabled (more permissive parsing)
///
/// # Arguments
///
/// - `source` - The TypeScript source code to parse
/// - `file_name` - The file name (used for error messages and TSX detection)
///
/// # Returns
///
/// - `Ok(Module)` - The parsed AST on success
/// - `Err(TsSynError::Parse)` - If the source contains syntax errors
///
/// # Example
///
/// ```rust,no_run
/// use macroforge_ts_syn::parse::parse_ts_module;
/// use macroforge_ts_syn::TsSynError;
///
/// fn example() -> Result<(), TsSynError> {
/// // Parse TypeScript
/// let _module = parse_ts_module("const x: number = 5;", "input.ts")?;
///
/// // Parse TSX (JSX in TypeScript)
/// let _module = parse_ts_module(
/// "const el = <div>Hello</div>;",
/// "component.tsx"
/// )?;
/// Ok(())
/// }
/// ```
///
/// # Integration with Lowering
///
/// The returned `Module` can be passed to the lowering functions:
///
/// ```rust,no_run
/// use macroforge_ts_syn::parse::parse_ts_module;
/// use macroforge_ts_syn::{lower_classes, lower_interfaces, lower_enums, lower_type_aliases, TsSynError};
///
/// fn example() -> Result<(), TsSynError> {
/// let source = "class User {}";
/// let module = parse_ts_module(source, "input.ts")?;
/// let _classes = lower_classes(&module, source)?;
/// let _interfaces = lower_interfaces(&module, source)?;
/// let _enums = lower_enums(&module, source)?;
/// let _type_aliases = lower_type_aliases(&module, source)?;
/// Ok(())
/// }
/// ```