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}