swc_ecma_compat_es2020/
lib.rs1use serde::Deserialize;
2use swc_common::{Mark, SyntaxContext};
3use swc_ecma_ast::Pass;
4
5pub use self::{
6 export_namespace_from::export_namespace_from, nullish_coalescing::nullish_coalescing,
7 optional_chaining::optional_chaining,
8};
9
10mod export_namespace_from;
11pub mod nullish_coalescing;
12pub mod optional_chaining;
13
14pub fn es2020(config: Config, unresolved_mark: Mark) -> impl Pass {
15 let mut options = swc_ecma_transformer::Options::default();
16 options.unresolved_ctxt = SyntaxContext::empty().apply_mark(unresolved_mark);
17 options.assumptions.no_document_all = config.nullish_coalescing.no_document_all;
18 options.env.es2020.nullish_coalescing = true;
19 options.env.es2020.export_namespace_from = true;
20
21 (
22 optional_chaining(config.optional_chaining, unresolved_mark),
23 options.into_pass(),
24 )
25}
26
27#[derive(Debug, Clone, Default, Deserialize)]
28#[serde(rename_all = "camelCase")]
29pub struct Config {
30 #[serde(flatten)]
31 pub nullish_coalescing: nullish_coalescing::Config,
32 #[serde(flatten)]
33 pub optional_chaining: optional_chaining::Config,
34}