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