oxc_transformer/
compiler_assumptions.rs

1use serde::Deserialize;
2
3/// Compiler assumptions
4///
5/// For producing smaller output.
6///
7/// See <https://babeljs.io/docs/assumptions>
8#[derive(Debug, Default, Clone, Copy, Deserialize)]
9#[serde(rename_all = "camelCase", deny_unknown_fields)]
10pub struct CompilerAssumptions {
11    #[serde(default)]
12    #[deprecated = "Not Implemented"]
13    pub array_like_is_iterable: bool,
14
15    #[serde(default)]
16    #[deprecated = "Not Implemented"]
17    pub constant_reexports: bool,
18
19    #[serde(default)]
20    #[deprecated = "Not Implemented"]
21    pub constant_super: bool,
22
23    #[serde(default)]
24    #[deprecated = "Not Implemented"]
25    pub enumerable_module_meta: bool,
26
27    #[serde(default)]
28    pub ignore_function_length: bool,
29
30    #[serde(default)]
31    #[deprecated = "Not Implemented"]
32    pub ignore_to_primitive_hint: bool,
33
34    #[serde(default)]
35    #[deprecated = "Not Implemented"]
36    pub iterable_is_array: bool,
37
38    #[serde(default)]
39    #[deprecated = "Not Implemented"]
40    pub mutable_template_object: bool,
41
42    #[serde(default)]
43    #[deprecated = "Not Implemented"]
44    pub no_class_calls: bool,
45
46    #[serde(default)]
47    pub no_document_all: bool,
48
49    #[serde(default)]
50    #[deprecated = "Not Implemented"]
51    pub no_incomplete_ns_import_detection: bool,
52
53    #[serde(default)]
54    #[deprecated = "Not Implemented"]
55    pub no_new_arrows: bool,
56
57    #[serde(default)]
58    #[deprecated = "Not Implemented"]
59    pub no_uninitialized_private_field_access: bool,
60
61    #[serde(default)]
62    pub object_rest_no_symbols: bool,
63
64    #[serde(default)]
65    #[deprecated = "Not Implemented"]
66    pub private_fields_as_symbols: bool,
67
68    #[serde(default)]
69    pub private_fields_as_properties: bool,
70
71    #[serde(default)]
72    pub pure_getters: bool,
73
74    #[serde(default)]
75    #[deprecated = "Not Implemented"]
76    pub set_class_methods: bool,
77
78    #[serde(default)]
79    #[deprecated = "Not Implemented"]
80    pub set_computed_properties: bool,
81
82    /// When using public class fields, assume that they don't shadow any getter in the current class,
83    /// in its subclasses or in its superclass. Thus, it's safe to assign them rather than using
84    /// `Object.defineProperty`.
85    ///
86    /// For example:
87    ///
88    /// Input:
89    /// ```js
90    /// class Test {
91    ///  field = 2;
92    ///
93    ///  static staticField = 3;
94    /// }
95    /// ```
96    ///
97    /// When `set_public_class_fields` is `true`, the output will be:
98    /// ```js
99    /// class Test {
100    ///  constructor() {
101    ///    this.field = 2;
102    ///  }
103    /// }
104    /// Test.staticField = 3;
105    /// ```
106    ///
107    /// Otherwise, the output will be:
108    /// ```js
109    /// import _defineProperty from "@oxc-project/runtime/helpers/defineProperty";
110    /// class Test {
111    ///   constructor() {
112    ///     _defineProperty(this, "field", 2);
113    ///   }
114    /// }
115    /// _defineProperty(Test, "staticField", 3);
116    /// ```
117    ///
118    /// NOTE: For TypeScript, if you wanted behavior is equivalent to `useDefineForClassFields: false`, you should
119    /// set both `set_public_class_fields` and [`crate::TypeScriptOptions::remove_class_fields_without_initializer`]
120    /// to `true`.
121    #[serde(default)]
122    pub set_public_class_fields: bool,
123
124    #[serde(default)]
125    #[deprecated = "Not Implemented"]
126    pub set_spread_properties: bool,
127
128    #[serde(default)]
129    #[deprecated = "Not Implemented"]
130    pub skip_for_of_iterator_closing: bool,
131
132    #[serde(default)]
133    #[deprecated = "Not Implemented"]
134    pub super_is_callable_constructor: bool,
135}