mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
parent
7034bcc47d
commit
7710d8caf1
8 changed files with 149 additions and 22 deletions
|
|
@ -1,15 +0,0 @@
|
||||||
#[cfg(feature = "serialize")]
|
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
/// Compiler assumptions
|
|
||||||
///
|
|
||||||
/// See <https://babeljs.io/docs/assumptions>
|
|
||||||
#[derive(Debug, Default, Clone, Copy)]
|
|
||||||
#[cfg_attr(feature = "serialize", derive(Deserialize))]
|
|
||||||
#[cfg_attr(feature = "serialize", serde(rename_all = "camelCase"))]
|
|
||||||
pub struct CompilerAssumptions {
|
|
||||||
/// When using operators that check for null or undefined, assume that they are never used with the special value document.all.
|
|
||||||
/// See <https://babeljs.io/docs/assumptions#nodocumentall>.
|
|
||||||
#[cfg_attr(feature = "serialize", serde(default))]
|
|
||||||
pub no_document_all: bool,
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
//! Common code for JavaScript Syntax
|
//! Common code for JavaScript Syntax
|
||||||
|
|
||||||
pub mod assumptions;
|
|
||||||
pub mod class;
|
pub mod class;
|
||||||
pub mod identifier;
|
pub mod identifier;
|
||||||
pub mod keyword;
|
pub mod keyword;
|
||||||
|
|
|
||||||
34
crates/oxc_transformer/src/compiler_assumptions.rs
Normal file
34
crates/oxc_transformer/src/compiler_assumptions.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
/// Compiler assumptions
|
||||||
|
///
|
||||||
|
/// For producing smaller output.
|
||||||
|
///
|
||||||
|
/// See <https://babeljs.io/docs/assumptions>
|
||||||
|
#[derive(Debug, Default, Clone, Copy, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct CompilerAssumptions {
|
||||||
|
pub array_like_is_iterable: bool,
|
||||||
|
pub constant_reexports: bool,
|
||||||
|
pub constant_super: bool,
|
||||||
|
pub enumerable_module_meta: bool,
|
||||||
|
pub ignore_function_length: bool,
|
||||||
|
pub ignore_to_primitive_hint: bool,
|
||||||
|
pub iterable_is_array: bool,
|
||||||
|
pub mutable_template_object: bool,
|
||||||
|
pub no_class_calls: bool,
|
||||||
|
pub no_document_all: bool,
|
||||||
|
pub no_incomplete_ns_import_detection: bool,
|
||||||
|
pub no_new_arrows: bool,
|
||||||
|
pub no_uninitialized_private_field_access: bool,
|
||||||
|
pub object_rest_no_symbols: bool,
|
||||||
|
pub private_fields_as_symbols: bool,
|
||||||
|
pub private_fields_as_properties: bool,
|
||||||
|
pub pure_getters: bool,
|
||||||
|
pub set_class_methods: bool,
|
||||||
|
pub set_computed_properties: bool,
|
||||||
|
pub set_public_class_fields: bool,
|
||||||
|
pub set_spread_properties: bool,
|
||||||
|
pub skip_for_of_iterator_closing: bool,
|
||||||
|
pub super_is_callable_constructor: bool,
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,8 @@
|
||||||
//! * <https://babel.dev/docs/presets>
|
//! * <https://babel.dev/docs/presets>
|
||||||
//! * <https://github.com/microsoft/TypeScript/blob/main/src/compiler/transformer.ts>
|
//! * <https://github.com/microsoft/TypeScript/blob/main/src/compiler/transformer.ts>
|
||||||
|
|
||||||
|
// Core
|
||||||
|
mod compiler_assumptions;
|
||||||
// Plugins: <https://babeljs.io/docs/plugins-list>
|
// Plugins: <https://babeljs.io/docs/plugins-list>
|
||||||
mod decorators;
|
mod decorators;
|
||||||
mod react_display_name;
|
mod react_display_name;
|
||||||
|
|
@ -20,6 +22,7 @@ use oxc_semantic::Semantic;
|
||||||
use oxc_span::SourceType;
|
use oxc_span::SourceType;
|
||||||
|
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
|
compiler_assumptions::CompilerAssumptions,
|
||||||
decorators::{Decorators, DecoratorsOptions},
|
decorators::{Decorators, DecoratorsOptions},
|
||||||
react_display_name::{ReactDisplayName, ReactDisplayNameOptions},
|
react_display_name::{ReactDisplayName, ReactDisplayNameOptions},
|
||||||
react_jsx::{ReactJsx, ReactJsxOptions},
|
react_jsx::{ReactJsx, ReactJsxOptions},
|
||||||
|
|
@ -31,6 +34,12 @@ pub use crate::{
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct TransformOptions {
|
pub struct TransformOptions {
|
||||||
|
// Core
|
||||||
|
/// Set assumptions in order to produce smaller output.
|
||||||
|
/// For more information, check the [assumptions](https://babel.dev/docs/assumptions) documentation page.
|
||||||
|
pub assumptions: CompilerAssumptions,
|
||||||
|
|
||||||
|
// Plugins
|
||||||
pub decorators: DecoratorsOptions,
|
pub decorators: DecoratorsOptions,
|
||||||
pub typescript: TypeScriptOptions,
|
pub typescript: TypeScriptOptions,
|
||||||
pub react_jsx: ReactJsxOptions,
|
pub react_jsx: ReactJsxOptions,
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
use serde::Deserialize;
|
mod options;
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Deserialize)]
|
pub use self::options::ReactJsxOptions;
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
pub struct ReactJsxOptions;
|
|
||||||
|
|
||||||
/// [plugin-transform-react-jsx](https://babeljs.io/docs/babel-plugin-transform-react-jsx)
|
/// [plugin-transform-react-jsx](https://babeljs.io/docs/babel-plugin-transform-react-jsx)
|
||||||
///
|
///
|
||||||
|
|
@ -12,6 +10,11 @@ pub struct ReactJsxOptions;
|
||||||
/// please use @babel/plugin-transform-react-jsx-development for a better debugging experience.
|
/// please use @babel/plugin-transform-react-jsx-development for a better debugging experience.
|
||||||
///
|
///
|
||||||
/// This plugin is included in `preset-react`.
|
/// This plugin is included in `preset-react`.
|
||||||
|
///
|
||||||
|
/// References:
|
||||||
|
///
|
||||||
|
/// * <https://babeljs.io/docs/babel-plugin-transform-react-jsx>
|
||||||
|
/// * <https://github.com/babel/babel/tree/main/packages/babel-helper-builder-react-jsx>
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct ReactJsx {
|
pub struct ReactJsx {
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
|
|
|
||||||
97
crates/oxc_transformer/src/react_jsx/options.rs
Normal file
97
crates/oxc_transformer/src/react_jsx/options.rs
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ReactJsxOptions {
|
||||||
|
// Both Runtimes
|
||||||
|
//
|
||||||
|
/// Decides which runtime to use.
|
||||||
|
pub runtime: ReactJsxRuntime,
|
||||||
|
|
||||||
|
/// This toggles behavior specific to development, such as adding __source and __self.
|
||||||
|
///
|
||||||
|
/// Defaults to `true`.
|
||||||
|
#[serde(default = "default_as_true")]
|
||||||
|
pub development: bool,
|
||||||
|
|
||||||
|
/// Enables `@babel/plugin-transform-react-pure-annotations`.
|
||||||
|
///
|
||||||
|
/// It will mark top-level React method calls as pure for tree shaking.
|
||||||
|
///
|
||||||
|
/// Defaults to `true`.
|
||||||
|
#[serde(default = "default_as_true")]
|
||||||
|
pub pure: bool,
|
||||||
|
//
|
||||||
|
// React Automatic Runtime
|
||||||
|
//
|
||||||
|
/// Replaces the import source when importing functions.
|
||||||
|
///
|
||||||
|
/// Defaults to `react`.
|
||||||
|
#[serde(default = "default_for_import_source")]
|
||||||
|
pub import_source: Cow<'static, str>,
|
||||||
|
//
|
||||||
|
// React Classic Runtime
|
||||||
|
//
|
||||||
|
/// Replace the function used when compiling JSX expressions.
|
||||||
|
///
|
||||||
|
/// It should be a qualified name (e.g. React.createElement) or an identifier (e.g. createElement).
|
||||||
|
///
|
||||||
|
/// Note that the @jsx React.DOM pragma has been deprecated as of React v0.12
|
||||||
|
///
|
||||||
|
/// Defaults to `React.createElement`.
|
||||||
|
#[serde(default = "default_for_pragma")]
|
||||||
|
pub pragma: Cow<'static, str>,
|
||||||
|
|
||||||
|
/// Replace the component used when compiling JSX fragments. It should be a valid JSX tag name.
|
||||||
|
///
|
||||||
|
/// Defaults to `React.Fragment`.
|
||||||
|
#[serde(default = "default_for_pragma_frag")]
|
||||||
|
pub pragma_frag: Cow<'static, str>,
|
||||||
|
//
|
||||||
|
// `useBuiltIns` and `useSpread` are deprecated in babel 8.
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for ReactJsxOptions {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
runtime: ReactJsxRuntime::default(),
|
||||||
|
development: default_as_true(),
|
||||||
|
pure: default_as_true(),
|
||||||
|
import_source: default_for_import_source(),
|
||||||
|
pragma: default_for_pragma(),
|
||||||
|
pragma_frag: default_for_pragma_frag(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn default_as_true() -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn default_for_import_source() -> Cow<'static, str> {
|
||||||
|
Cow::Borrowed("react")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_for_pragma() -> Cow<'static, str> {
|
||||||
|
Cow::Borrowed("React.createElement")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_for_pragma_frag() -> Cow<'static, str> {
|
||||||
|
Cow::Borrowed("React.Fragment")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Decides which runtime to use.
|
||||||
|
///
|
||||||
|
/// Auto imports the functions that JSX transpiles to.
|
||||||
|
/// classic does not automatic import anything.
|
||||||
|
#[derive(Debug, Default, Clone, Deserialize)]
|
||||||
|
pub enum ReactJsxRuntime {
|
||||||
|
Classic,
|
||||||
|
/// The default runtime is switched to automatic in Babel 8.
|
||||||
|
#[default]
|
||||||
|
Automatic,
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use oxc_syntax::assumptions::CompilerAssumptions;
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
|
|
@ -21,7 +20,7 @@ pub struct BabelOptions {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub allow_undeclared_exports: bool,
|
pub allow_undeclared_exports: bool,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub assumptions: CompilerAssumptions,
|
pub assumptions: Value,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BabelOptions {
|
impl BabelOptions {
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ pub trait TestCase {
|
||||||
}
|
}
|
||||||
let options = self.options();
|
let options = self.options();
|
||||||
TransformOptions {
|
TransformOptions {
|
||||||
|
assumptions: serde_json::from_value(options.assumptions.clone()).unwrap_or_default(),
|
||||||
decorators: options
|
decorators: options
|
||||||
.get_plugin("proposal-decorators")
|
.get_plugin("proposal-decorators")
|
||||||
.map(get_options::<DecoratorsOptions>)
|
.map(get_options::<DecoratorsOptions>)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue