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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
//! 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
//! let source = r#"
//! class User {
//! name: string;
//! age: number;
//! }
//! "#;
//!
//! # #[cfg(feature = "swc")] {
//! use macroforge_ts_syn::lower_classes;
//! use macroforge_ts_syn::parse::parse_ts_module;
//!
//! let module = parse_ts_module(source, "input.ts")?;
//! let _classes = lower_classes(&module, source, None)?;
//! # }
//! # #[cfg(feature = "oxc")] {
//! use macroforge_ts_syn::{lower_classes_oxc, parse_oxc_program};
//!
//! let program = parse_oxc_program(source)?;
//! let _classes = lower_classes_oxc(&program, source, None)?;
//! # }
//! # Ok::<(), macroforge_ts_syn::TsSynError>(())
//! ```
//!
//! ## 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
/// # #[cfg(feature = "swc")] {
/// use macroforge_ts_syn::parse::parse_ts_module;
///
/// let _module = parse_ts_module("const x: number = 5;", "input.ts")?;
/// let _module = parse_ts_module("const el = <div>Hello</div>;", "component.tsx")?;
/// # }
/// # #[cfg(feature = "oxc")] {
/// use macroforge_ts_syn::parse_oxc_program;
///
/// let _program = parse_oxc_program("const x: number = 5;")?;
/// let _program = parse_oxc_program("const el = <div>Hello</div>;")?;
/// # }
/// # Ok::<(), macroforge_ts_syn::TsSynError>(())
/// ```
///
/// # Integration with Lowering
///
/// The returned `Module` can be passed to the lowering functions:
///
/// ```rust
/// let source = "class User {}";
///
/// # #[cfg(feature = "swc")] {
/// use macroforge_ts_syn::parse::parse_ts_module;
/// use macroforge_ts_syn::{lower_classes, lower_enums, lower_interfaces, lower_type_aliases};
///
/// let module = parse_ts_module(source, "input.ts")?;
/// let _classes = lower_classes(&module, source, None)?;
/// let _interfaces = lower_interfaces(&module, source, None)?;
/// let _enums = lower_enums(&module, source, None)?;
/// let _type_aliases = lower_type_aliases(&module, source, None)?;
/// # }
/// # #[cfg(feature = "oxc")] {
/// use macroforge_ts_syn::{
/// lower_classes_oxc, lower_enums_oxc, lower_interfaces_oxc, lower_type_aliases_oxc,
/// parse_oxc_program,
/// };
///
/// let program = parse_oxc_program(source)?;
/// let _classes = lower_classes_oxc(&program, source, None)?;
/// let _interfaces = lower_interfaces_oxc(&program, source, None)?;
/// let _enums = lower_enums_oxc(&program, source, None)?;
/// let _type_aliases = lower_type_aliases_oxc(&program, source, None)?;
/// # }
/// # Ok::<(), macroforge_ts_syn::TsSynError>(())
/// ```