swc_ecma_compat_es2020/
lib.rs1use serde::Deserialize;
2use swc_common::Mark;
3use swc_ecma_ast::Pass;
4use swc_ecma_compiler::{Compiler, Features};
5use swc_ecma_transforms_base::assumptions::Assumptions;
6
7pub use self::{
8 export_namespace_from::export_namespace_from, nullish_coalescing::nullish_coalescing,
9 optional_chaining::optional_chaining,
10};
11
12mod export_namespace_from;
13pub mod nullish_coalescing;
14pub mod optional_chaining;
15
16pub fn es2020(config: Config, unresolved_mark: Mark) -> impl Pass {
17 let mut assumptions = Assumptions::default();
18 assumptions.no_document_all = config.nullish_coalescing.no_document_all;
19
20 (
21 nullish_coalescing(config.nullish_coalescing),
22 optional_chaining(config.optional_chaining, unresolved_mark),
23 Compiler::new(swc_ecma_compiler::Config {
24 includes: Features::EXPORT_NAMESPACE_FROM,
25 assumptions,
26 ..Default::default()
27 }),
28 )
29}
30
31#[derive(Debug, Clone, Default, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct Config {
34 #[serde(flatten)]
35 pub nullish_coalescing: nullish_coalescing::Config,
36 #[serde(flatten)]
37 pub optional_chaining: optional_chaining::Config,
38}