swc_ecma_compat_es2020/
lib.rs

1use 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        optional_chaining(config.optional_chaining, unresolved_mark),
22        Compiler::new(swc_ecma_compiler::Config {
23            includes: Features::EXPORT_NAMESPACE_FROM | Features::NULLISH_COALESCING,
24            assumptions,
25            ..Default::default()
26        }),
27    )
28}
29
30#[derive(Debug, Clone, Default, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct Config {
33    #[serde(flatten)]
34    pub nullish_coalescing: nullish_coalescing::Config,
35    #[serde(flatten)]
36    pub optional_chaining: optional_chaining::Config,
37}