swc_ecma_compat_es2020/
lib.rs

1use 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}