swc_ecma_transforms_typescript/
config.rs

1use bytes_str::BytesStr;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Default, Serialize, Deserialize, Clone, Copy)]
5#[serde(rename_all = "camelCase")]
6pub struct Config {
7    /// https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax
8    #[serde(default)]
9    pub verbatim_module_syntax: bool,
10
11    /// Native class properties support
12    #[serde(default)]
13    pub native_class_properties: bool,
14
15    /// https://www.typescriptlang.org/tsconfig/#importsNotUsedAsValues
16    #[serde(default)]
17    pub import_not_used_as_values: ImportsNotUsedAsValues,
18
19    /// Don't create `export {}`.
20    /// By default, strip creates `export {}` for modules to preserve module
21    /// context.
22    ///
23    /// https://github.com/swc-project/swc/issues/1698
24    #[serde(default)]
25    pub no_empty_export: bool,
26
27    #[serde(default)]
28    pub import_export_assign_config: TsImportExportAssignConfig,
29
30    /// Disables an optimization that inlines TS enum member values
31    /// within the same module that assumes the enum member values
32    /// are never modified.
33    ///
34    /// Defaults to false.
35    #[serde(default)]
36    pub ts_enum_is_mutable: bool,
37}
38
39#[derive(Debug, Default, Serialize, Deserialize)]
40pub struct TsxConfig {
41    /// Note: this pass handle jsx directives in comments
42    #[serde(default)]
43    pub pragma: Option<BytesStr>,
44
45    /// Note: this pass handle jsx directives in comments
46    #[serde(default)]
47    pub pragma_frag: Option<BytesStr>,
48}
49
50#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
51pub enum TsImportExportAssignConfig {
52    ///  - Rewrite `import foo = require("foo")` to `var foo = require("foo")`
53    ///  - Rewrite `export =` to `module.exports = `
54    ///
55    /// Note: This option is deprecated as all CJS/AMD/UMD can handle it
56    /// themselves.
57    #[default]
58    Classic,
59
60    /// preserve for CJS/AMD/UMD
61    Preserve,
62
63    /// Rewrite `import foo = require("foo")` to
64    /// ```javascript
65    /// import { createRequire as _createRequire } from "module";
66    /// const __require = _createRequire(import.meta.url);
67    /// const foo = __require("foo");
68    /// ```
69    ///
70    /// Report error for `export =`
71    NodeNext,
72
73    /// Both `import =` and `export =` are disabled.
74    /// An error will be reported if an import/export assignment is found.
75    EsNext,
76}
77
78#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
79#[non_exhaustive]
80pub enum ImportsNotUsedAsValues {
81    #[serde(rename = "remove")]
82    #[default]
83    Remove,
84    #[serde(rename = "preserve")]
85    Preserve,
86}