mirror of
https://github.com/danbulant/oxc
synced 2026-05-21 13:18:59 +00:00
fix(transformer/class-properties): create temp var for class where required (#7516)
Fix class properties transform to create a temp var for class when it's required.
Input:
```js
class C {
static getSelf = () => this;
}
const C2 = C;
C = 123;
assert(C2.getSelf() === C);
```
Output:
```js
var _C;
class C {}
_C = C;
_defineProperty(C, "getSelf", () => _C);
const C2 = C;
C = 123;
assert(C2.getSelf() === C);
```
Previously, temp var wasn't used so code was `_defineProperty(C, "getSelf", () => C);`. `C` is altered later by `C = 123`, so `C2.getSelf()` returned `123`, instead of reference to the class.
The logic around when a temp var is required and when it's not, and when/where it's referenced is ridiculously complicated. So add some debug assert mechanisms to double-check the logic.
This commit is contained in:
parent
a07f278dfd
commit
0eadd9f6de
8 changed files with 634 additions and 459 deletions
|
|
@ -12,14 +12,14 @@ use oxc_traverse::{BoundIdentifier, TraverseCtx};
|
|||
|
||||
use crate::common::helper_loader::Helper;
|
||||
|
||||
use super::super::ClassStaticBlock;
|
||||
use super::{super::ClassStaticBlock, ClassBindings};
|
||||
use super::{
|
||||
private_props::{PrivateProp, PrivateProps},
|
||||
utils::{
|
||||
create_assignment, create_underscore_ident_name, create_variable_declaration,
|
||||
exprs_into_stmts,
|
||||
},
|
||||
ClassName, ClassProperties, FxIndexMap,
|
||||
ClassProperties, FxIndexMap,
|
||||
};
|
||||
|
||||
impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
||||
|
|
@ -58,10 +58,6 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
return 0;
|
||||
}
|
||||
|
||||
self.class_name = ClassName::Name(match &class.id {
|
||||
Some(id) => id.name.as_str(),
|
||||
None => "Class",
|
||||
});
|
||||
self.is_declaration = false;
|
||||
|
||||
self.transform_class(class, ctx);
|
||||
|
|
@ -104,10 +100,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
// TODO: Deduct static private props from `expr_count`.
|
||||
// Or maybe should store count and increment it when create private static props?
|
||||
// They're probably pretty rare, so it'll be rarely used.
|
||||
expr_count += match &self.class_name {
|
||||
ClassName::Binding(_) => 2,
|
||||
ClassName::Name(_) => 1,
|
||||
};
|
||||
expr_count += 1 + usize::from(self.class_bindings.temp.is_some());
|
||||
|
||||
let mut exprs = ctx.ast.vec_with_capacity(expr_count);
|
||||
|
||||
|
|
@ -141,7 +134,12 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
|
||||
// Insert class + static property assignments + static blocks
|
||||
let class_expr = ctx.ast.move_expression(expr);
|
||||
if let ClassName::Binding(binding) = &self.class_name {
|
||||
if let Some(binding) = &self.class_bindings.temp {
|
||||
// Insert `var _Class` statement, if it wasn't already in `transform_class`
|
||||
if !self.temp_var_is_created {
|
||||
self.ctx.var_declarations.insert_var(binding, None, ctx);
|
||||
}
|
||||
|
||||
// `_Class = class {}`
|
||||
let assignment = create_assignment(binding, class_expr, ctx);
|
||||
exprs.push(assignment);
|
||||
|
|
@ -179,10 +177,6 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
return;
|
||||
}
|
||||
|
||||
// Class declarations are always named, except for `export default class {}`, which is handled separately
|
||||
let ident = class.id.as_ref().unwrap();
|
||||
self.class_name = ClassName::Binding(BoundIdentifier::from_binding_ident(ident));
|
||||
|
||||
self.transform_class_declaration_impl(class, stmt_address, ctx);
|
||||
}
|
||||
|
||||
|
|
@ -190,29 +184,14 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
///
|
||||
/// Separate function as this is only circumstance where have to deal with anonymous class declaration,
|
||||
/// and it's an uncommon case (can only be 1 per file).
|
||||
// TODO: This method is now defunct. Can just have 1 `transform_class_declaration` function.
|
||||
pub(super) fn transform_class_export_default(
|
||||
&mut self,
|
||||
class: &mut Class<'a>,
|
||||
stmt_address: Address,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
// Class declarations as default export may not have a name
|
||||
self.class_name = match class.id.as_ref() {
|
||||
Some(ident) => ClassName::Binding(BoundIdentifier::from_binding_ident(ident)),
|
||||
None => ClassName::Name("Class"),
|
||||
};
|
||||
|
||||
self.transform_class_declaration_impl(class, stmt_address, ctx);
|
||||
|
||||
// If class was unnamed `export default class {}`, and a binding is required, set its name.
|
||||
// e.g. `export default class { static x = 1; }` -> `export default class _Class {}; _Class.x = 1;`
|
||||
// TODO(improve-on-babel): Could avoid this if treated `export default class {}` as a class expression
|
||||
// instead of a class declaration.
|
||||
if class.id.is_none() {
|
||||
if let ClassName::Binding(binding) = &self.class_name {
|
||||
class.id = Some(binding.create_binding_identifier(ctx));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn transform_class_declaration_impl(
|
||||
|
|
@ -227,6 +206,30 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
|
||||
// TODO: Run other transforms on inserted statements. How?
|
||||
|
||||
if let Some(temp_binding) = &self.class_bindings.temp {
|
||||
// Binding for class name is required
|
||||
if let Some(ident) = &class.id {
|
||||
// Insert `var _Class` statement, if it wasn't already in `transform_class`
|
||||
if !self.temp_var_is_created {
|
||||
self.ctx.var_declarations.insert_var(temp_binding, None, ctx);
|
||||
}
|
||||
|
||||
// Insert `_Class = Class` after class.
|
||||
// TODO(improve-on-babel): Could just insert `var _Class = Class;` after class,
|
||||
// rather than separate `var _Class` declaration.
|
||||
let class_name =
|
||||
BoundIdentifier::from_binding_ident(ident).create_read_expression(ctx);
|
||||
let expr = create_assignment(temp_binding, class_name, ctx);
|
||||
let stmt = ctx.ast.statement_expression(SPAN, expr);
|
||||
self.insert_after_stmts.insert(0, stmt);
|
||||
} else {
|
||||
// Class must be default export `export default class {}`, as all other class declarations
|
||||
// always have a name. Set class name.
|
||||
*ctx.symbols_mut().get_flags_mut(temp_binding.symbol_id) = SymbolFlags::Class;
|
||||
class.id = Some(temp_binding.create_binding_identifier(ctx));
|
||||
}
|
||||
}
|
||||
|
||||
// Insert expressions before/after class
|
||||
if !self.insert_before.is_empty() {
|
||||
self.ctx.statement_injector.insert_many_before(
|
||||
|
|
@ -343,24 +346,48 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
return;
|
||||
}
|
||||
|
||||
// Create temp var if class has any static props
|
||||
if has_static_prop {
|
||||
// TODO(improve-on-babel): Even though private static properties may not access
|
||||
// class name, Babel still creates a temp var for class. That's unnecessary.
|
||||
self.initialize_class_name_binding(ctx);
|
||||
}
|
||||
// Initialize class binding vars.
|
||||
// Static prop in class expression or anonymous `export default class {}` always require
|
||||
// temp var for class. Static prop in class declaration doesn't.
|
||||
let mut class_name_binding = class.id.as_ref().map(BoundIdentifier::from_binding_ident);
|
||||
|
||||
let need_temp_var = has_static_prop && (!self.is_declaration || class.id.is_none());
|
||||
self.temp_var_is_created = need_temp_var;
|
||||
|
||||
let class_temp_binding = if need_temp_var {
|
||||
let temp_binding = ClassBindings::create_temp_binding(class_name_binding.as_ref(), ctx);
|
||||
if self.is_declaration {
|
||||
// Anonymous `export default class {}`. Set class name binding to temp var.
|
||||
// Actual class name will be set to this later.
|
||||
class_name_binding = Some(temp_binding.clone());
|
||||
} else {
|
||||
// Create temp var `var _Class;` statement.
|
||||
// TODO(improve-on-babel): Inserting the temp var `var _Class` statement here is only
|
||||
// to match Babel's output. It'd be simpler just to insert it at the end and get rid of
|
||||
// `temp_var_is_created` that tracks whether it's done already or not.
|
||||
self.ctx.var_declarations.insert_var(&temp_binding, None, ctx);
|
||||
}
|
||||
Some(temp_binding)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
self.class_bindings = ClassBindings::new(class_name_binding, class_temp_binding);
|
||||
|
||||
// Add entry to `private_props_stack`
|
||||
if private_props.is_empty() {
|
||||
self.private_props_stack.push(None);
|
||||
} else {
|
||||
let class_binding = match &self.class_name {
|
||||
ClassName::Binding(binding) => Some(binding.clone()),
|
||||
ClassName::Name(_) => None,
|
||||
};
|
||||
// `class_bindings.temp` in the `PrivateProps` entry is the temp var (if one has been created).
|
||||
// Private fields in static prop initializers use the temp var in the transpiled output
|
||||
// e.g. `_assertClassBrand(_Class, obj, _prop)`.
|
||||
// At end of this function, if it's a class declaration, we set `class_bindings.temp` to be
|
||||
// the binding for the class name, for when the class body is visited, because in the class
|
||||
// body, private fields use the class name
|
||||
// e.g. `_assertClassBrand(Class, obj, _prop)` (note `Class` not `_Class`).
|
||||
self.private_props_stack.push(Some(PrivateProps {
|
||||
props: private_props,
|
||||
class_binding,
|
||||
class_bindings: self.class_bindings.clone(),
|
||||
is_declaration: self.is_declaration,
|
||||
}));
|
||||
}
|
||||
|
|
@ -407,6 +434,29 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
Self::insert_constructor(class, instance_inits, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
// Update class bindings prior to traversing class body and insertion of statements/expressions
|
||||
// before/after the class. See comments on `ClassBindings`.
|
||||
if let Some(private_props) = self.private_props_stack.last_mut() {
|
||||
// Transfer state of `temp` binding from `private_props_stack` to `self`.
|
||||
// A temp binding may have been created while transpiling private fields in
|
||||
// static prop initializers.
|
||||
// TODO: Do this where `class_bindings.temp` is consumed instead?
|
||||
if let Some(temp_binding) = &private_props.class_bindings.temp {
|
||||
self.class_bindings.temp = Some(temp_binding.clone());
|
||||
}
|
||||
|
||||
// Static private fields reference class name (not temp var) in class declarations.
|
||||
// `class Class { static #prop; method() { return obj.#prop; } }`
|
||||
// -> `method() { return _assertClassBrand(Class, obj, _prop)._; }`
|
||||
// (note `Class` in `_assertClassBrand(Class, ...)`, not `_Class`)
|
||||
// So set "temp" binding to actual class name while visiting class body.
|
||||
// Note: If declaration is `export default class {}` with no name, and class has static props,
|
||||
// then class has had name binding created already above. So name binding is always `Some`.
|
||||
if self.is_declaration {
|
||||
private_props.class_bindings.temp = private_props.class_bindings.name.clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Pop from private props stack.
|
||||
|
|
@ -467,33 +517,21 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
self.insert_private_static_init_assignment(ident, value, ctx);
|
||||
} else {
|
||||
// Convert to assignment or `_defineProperty` call, depending on `loose` option
|
||||
let ClassName::Binding(class_binding) = &self.class_name else {
|
||||
// Binding is initialized in 1st pass in `transform_class` when a static prop is found
|
||||
unreachable!();
|
||||
let class_binding = if self.is_declaration {
|
||||
// Class declarations always have a name except `export default class {}`.
|
||||
// For default export, binding is created when static prop found in 1st pass.
|
||||
self.class_bindings.name.as_ref().unwrap()
|
||||
} else {
|
||||
// Binding is created when static prop found in 1st pass.
|
||||
self.class_bindings.temp.as_ref().unwrap()
|
||||
};
|
||||
|
||||
let assignee = class_binding.create_read_expression(ctx);
|
||||
let init_expr = self.create_init_assignment(prop, value, assignee, true, ctx);
|
||||
self.insert_expr_after_class(init_expr, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a binding for class name, if there isn't one already.
|
||||
fn initialize_class_name_binding(&mut self, ctx: &mut TraverseCtx<'a>) -> &BoundIdentifier<'a> {
|
||||
if let ClassName::Name(name) = &self.class_name {
|
||||
let binding = if self.is_declaration {
|
||||
ctx.generate_uid_in_current_scope(name, SymbolFlags::Class)
|
||||
} else {
|
||||
let flags = SymbolFlags::FunctionScopedVariable;
|
||||
let binding = ctx.generate_uid_in_current_scope(name, flags);
|
||||
self.ctx.var_declarations.insert_var(&binding, None, ctx);
|
||||
binding
|
||||
};
|
||||
self.class_name = ClassName::Binding(binding);
|
||||
}
|
||||
let ClassName::Binding(binding) = &self.class_name else { unreachable!() };
|
||||
binding
|
||||
}
|
||||
|
||||
/// `assignee.foo = value` or `_defineProperty(assignee, "foo", value)`
|
||||
fn create_init_assignment(
|
||||
&mut self,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,103 @@
|
|||
use oxc_syntax::symbol::{SymbolFlags, SymbolId};
|
||||
use oxc_traverse::{BoundIdentifier, TraverseCtx};
|
||||
|
||||
/// Store for bindings for class.
|
||||
///
|
||||
/// 1. Existing binding for class name (if class has a name).
|
||||
/// 2. Temp var `_Class`, which may or may not be required.
|
||||
///
|
||||
/// Temp var is required in the following circumstances:
|
||||
/// * Class expression has static properties.
|
||||
/// e.g. `C = class { x = 1; }`
|
||||
/// * Class declaration has static properties and one of the static prop's initializers contains:
|
||||
/// a. `this`
|
||||
/// e.g. `class C { x = this; }`
|
||||
/// b. Reference to class name
|
||||
/// e.g. `class C { x = C; }`
|
||||
/// c. A private field referring to one of the class's static private props.
|
||||
/// e.g. `class C { static #x; static y = obj.#x; }`
|
||||
///
|
||||
/// An instance of `ClassBindings` is stored in main `ClassProperties` transform, and a 2nd is stored
|
||||
/// in `PrivateProps` for the class, if the class has any private properties.
|
||||
/// If the class has private props, the instance of `ClassBindings` in `PrivateProps` is the source
|
||||
/// of truth.
|
||||
///
|
||||
/// The logic for when transpiled private fields use a reference to class name or class temp var
|
||||
/// is unfortunately rather complicated.
|
||||
///
|
||||
/// Transpiled private fields referring to a static private prop use:
|
||||
/// * Class name when field is within class body and class has a name
|
||||
/// e.g. `class C { static #x; method() { return obj.#x; } }`
|
||||
/// * Temp var when field is within class body and class has no name
|
||||
/// e.g. `C = class { static #x; method() { return obj.#x; } }`
|
||||
/// * Temp var when field is within a static prop initializer.
|
||||
/// e.g. `class C { static #x; y = obj.#x; }`
|
||||
///
|
||||
/// To cover all these cases, the meaning of `temp` binding here changes while traversing the class body.
|
||||
/// [`ClassProperties::transform_class`] sets `temp` binding to be a copy of the `name` binding before
|
||||
/// that traversal begins. So the name `temp` is misleading at that point.
|
||||
///
|
||||
/// Debug assertions are used to make sure this complex logic is correct.
|
||||
///
|
||||
/// [`ClassProperties::transform_class`]: super::ClassProperties::transform_class
|
||||
#[derive(Default, Clone)]
|
||||
pub(super) struct ClassBindings<'a> {
|
||||
/// Binding for class name, if class has name
|
||||
pub name: Option<BoundIdentifier<'a>>,
|
||||
/// Temp var for class.
|
||||
/// e.g. `_Class` in `_Class = class {}, _Class.x = 1, _Class`
|
||||
pub temp: Option<BoundIdentifier<'a>>,
|
||||
/// `true` if currently transforming static property initializers.
|
||||
/// Only used in debug builds to check logic is correct.
|
||||
#[cfg(debug_assertions)]
|
||||
pub currently_transforming_static_property_initializers: bool,
|
||||
}
|
||||
|
||||
impl<'a> ClassBindings<'a> {
|
||||
/// Create `ClassBindings`.
|
||||
pub fn new(
|
||||
name_binding: Option<BoundIdentifier<'a>>,
|
||||
temp_binding: Option<BoundIdentifier<'a>>,
|
||||
) -> Self {
|
||||
Self {
|
||||
name: name_binding,
|
||||
temp: temp_binding,
|
||||
#[cfg(debug_assertions)]
|
||||
currently_transforming_static_property_initializers: false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get `SymbolId` of name binding.
|
||||
pub fn name_symbol_id(&self) -> Option<SymbolId> {
|
||||
self.name.as_ref().map(|binding| binding.symbol_id)
|
||||
}
|
||||
|
||||
/// Create a binding for temp var, if there isn't one already.
|
||||
pub fn get_or_init_temp_binding(&mut self, ctx: &mut TraverseCtx<'a>) -> &BoundIdentifier<'a> {
|
||||
if self.temp.is_none() {
|
||||
// This should only be possible if we are currently transforming static prop initializers
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
assert!(
|
||||
self.currently_transforming_static_property_initializers,
|
||||
"Should be unreachable"
|
||||
);
|
||||
}
|
||||
|
||||
self.temp = Some(Self::create_temp_binding(self.name.as_ref(), ctx));
|
||||
}
|
||||
self.temp.as_ref().unwrap()
|
||||
}
|
||||
|
||||
/// Generate a binding for temp var.
|
||||
pub fn create_temp_binding(
|
||||
name_binding: Option<&BoundIdentifier<'a>>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) -> BoundIdentifier<'a> {
|
||||
// Base temp binding name on class name, or "Class" if no name.
|
||||
// TODO(improve-on-babel): If class name var isn't mutated, no need for temp var for
|
||||
// class declaration. Can just use class binding.
|
||||
let name = name_binding.map_or("Class", |binding| binding.name.as_str());
|
||||
ctx.generate_uid_in_current_scope(name, SymbolFlags::FunctionScopedVariable)
|
||||
}
|
||||
}
|
||||
|
|
@ -125,12 +125,13 @@
|
|||
//!
|
||||
//! Implementation is split into several files:
|
||||
//!
|
||||
//! * `mod.rs`: Setup, visitor, and ancillary types.
|
||||
//! * `mod.rs`: Setup and visitor.
|
||||
//! * `class.rs`: Transform of class body.
|
||||
//! * `constructor.rs`: Insertion of property initializers into class constructor.
|
||||
//! * `private.rs`: Transform of private property usages (`this.#prop`).
|
||||
//! * `private_props.rs`: Structures storing details of private properties.
|
||||
//! * `static_prop.rs`: Transform of static property initializers.
|
||||
//! * `class_bindings.rs`: Structure containing bindings for class name and temp var.
|
||||
//! * `utils.rs`: Utility functions.
|
||||
//!
|
||||
//! ## References
|
||||
|
|
@ -148,16 +149,18 @@ use serde::Deserialize;
|
|||
use oxc_allocator::{Address, GetAddress};
|
||||
use oxc_ast::ast::*;
|
||||
use oxc_data_structures::stack::NonEmptyStack;
|
||||
use oxc_traverse::{BoundIdentifier, Traverse, TraverseCtx};
|
||||
use oxc_traverse::{Traverse, TraverseCtx};
|
||||
|
||||
use crate::TransformCtx;
|
||||
|
||||
mod class;
|
||||
mod class_bindings;
|
||||
mod constructor;
|
||||
mod private;
|
||||
mod private_props;
|
||||
mod static_prop;
|
||||
mod utils;
|
||||
use class_bindings::ClassBindings;
|
||||
use private_props::PrivatePropsStack;
|
||||
|
||||
type FxIndexMap<K, V> = IndexMap<K, V, FxBuildHasher>;
|
||||
|
|
@ -205,10 +208,10 @@ pub struct ClassProperties<'a, 'ctx> {
|
|||
//
|
||||
/// `true` for class declaration, `false` for class expression
|
||||
is_declaration: bool,
|
||||
/// Var for class.
|
||||
/// e.g. `X` in `class X {}`.
|
||||
/// e.g. `_Class` in `_Class = class {}, _Class.x = 1, _Class`
|
||||
class_name: ClassName<'a>,
|
||||
/// Bindings for class name and temp var for class
|
||||
class_bindings: ClassBindings<'a>,
|
||||
/// `true` if temp var for class has been inserted
|
||||
temp_var_is_created: bool,
|
||||
/// Expressions to insert before class
|
||||
insert_before: Vec<Expression<'a>>,
|
||||
/// Expressions to insert after class expression
|
||||
|
|
@ -217,15 +220,6 @@ pub struct ClassProperties<'a, 'ctx> {
|
|||
insert_after_stmts: Vec<Statement<'a>>,
|
||||
}
|
||||
|
||||
/// Representation of binding for class name.
|
||||
enum ClassName<'a> {
|
||||
/// Class has a name. This is the binding.
|
||||
Binding(BoundIdentifier<'a>),
|
||||
/// Class is anonymous.
|
||||
/// This is the name it would have if we need to set class name, in order to reference it.
|
||||
Name(&'a str),
|
||||
}
|
||||
|
||||
impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
||||
pub fn new(
|
||||
options: ClassPropertiesOptions,
|
||||
|
|
@ -244,7 +238,8 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
class_expression_addresses_stack: NonEmptyStack::new(Address::DUMMY),
|
||||
// Temporary values - overwritten when entering class
|
||||
is_declaration: false,
|
||||
class_name: ClassName::Name(""),
|
||||
class_bindings: ClassBindings::default(),
|
||||
temp_var_is_created: false,
|
||||
// `Vec`s and `FxHashMap`s which are reused for every class being transformed
|
||||
insert_before: vec![],
|
||||
insert_after_exprs: vec![],
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
let Some(prop_details) = prop_details else {
|
||||
return Expression::PrivateFieldExpression(field_expr);
|
||||
};
|
||||
let ResolvedPrivateProp { prop_binding, class_binding, is_static, is_declaration } =
|
||||
let ResolvedPrivateProp { prop_binding, class_bindings, is_static, is_declaration } =
|
||||
prop_details;
|
||||
let prop_ident = prop_binding.create_read_expression(ctx);
|
||||
|
||||
|
|
@ -57,20 +57,25 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
|
||||
if is_static {
|
||||
// TODO: Ensure there are tests for nested classes with references to private static props
|
||||
// of outer class inside inner class, to make sure we're getting the right `class_binding`.
|
||||
let class_binding = class_binding.unwrap();
|
||||
// of outer class inside inner class, to make sure we're getting the right `class_bindings`.
|
||||
|
||||
// If `object` is reference to class name, there's no need for the class brand assertion
|
||||
if let Some(reference_id) =
|
||||
Self::shortcut_static_class(is_declaration, class_binding.symbol_id, &object, ctx)
|
||||
{
|
||||
if let Some((class_symbol_id, object_reference_id)) = Self::shortcut_static_class(
|
||||
is_declaration,
|
||||
class_bindings.name_symbol_id(),
|
||||
&object,
|
||||
ctx,
|
||||
) {
|
||||
// `_prop._`
|
||||
ctx.symbols_mut().delete_resolved_reference(class_binding.symbol_id, reference_id);
|
||||
ctx.symbols_mut().delete_resolved_reference(class_symbol_id, object_reference_id);
|
||||
Self::create_underscore_member_expression(prop_ident, span, ctx)
|
||||
} else {
|
||||
// `_assertClassBrand(Class, object, _prop)._`
|
||||
let class_binding = class_bindings.get_or_init_temp_binding(ctx);
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
|
||||
self.create_assert_class_brand_underscore(
|
||||
class_binding.create_read_expression(ctx),
|
||||
class_ident,
|
||||
object,
|
||||
prop_ident,
|
||||
span,
|
||||
|
|
@ -85,25 +90,29 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
|
||||
/// Check if can use shorter version of static private prop transform.
|
||||
///
|
||||
/// Can if both:
|
||||
/// Can if all of:
|
||||
/// 1. Class is a declaration, not an expression.
|
||||
/// 2. `object` is an `IdentifierReference` referring to class name binding.
|
||||
/// 2. Class has a name.
|
||||
/// 3. `object` is an `IdentifierReference` referring to class name binding.
|
||||
///
|
||||
/// If can use shorter version, returns `ReferenceId` of the `IdentifierReference`.
|
||||
/// If can use shorter version, returns `SymbolId` and `ReferenceId` of the `IdentifierReference`.
|
||||
//
|
||||
// TODO(improve-on-babel): No reason not to use the short version for class expressions too.
|
||||
// TODO: Take `&ClassBindings` instead of `Option<SymbolId>`.
|
||||
fn shortcut_static_class(
|
||||
is_declaration: bool,
|
||||
class_symbol_id: SymbolId,
|
||||
class_symbol_id: Option<SymbolId>,
|
||||
object: &Expression<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) -> Option<ReferenceId> {
|
||||
) -> Option<(SymbolId, ReferenceId)> {
|
||||
if is_declaration {
|
||||
if let Expression::Identifier(ident) = object {
|
||||
let reference_id = ident.reference_id();
|
||||
if let Some(symbol_id) = ctx.symbols().get_reference(reference_id).symbol_id() {
|
||||
if symbol_id == class_symbol_id {
|
||||
return Some(reference_id);
|
||||
if let Some(class_symbol_id) = class_symbol_id {
|
||||
if let Expression::Identifier(ident) = object {
|
||||
let reference_id = ident.reference_id();
|
||||
if let Some(symbol_id) = ctx.symbols().get_reference(reference_id).symbol_id() {
|
||||
if symbol_id == class_symbol_id {
|
||||
return Some((class_symbol_id, reference_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -185,7 +194,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
ctx: &mut TraverseCtx<'a>,
|
||||
) -> Option<(Expression<'a>, Expression<'a>)> {
|
||||
// TODO: Should never be `None` - only because implementation is incomplete.
|
||||
let ResolvedPrivateProp { prop_binding, class_binding, is_static, is_declaration } =
|
||||
let ResolvedPrivateProp { prop_binding, class_bindings, is_static, is_declaration } =
|
||||
self.private_props_stack.find(&field_expr.field)?;
|
||||
let prop_ident = prop_binding.create_read_expression(ctx);
|
||||
|
||||
|
|
@ -195,26 +204,33 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
let replacement = if is_static {
|
||||
// `object.#prop(arg)` -> `_assertClassBrand(Class, object, _prop)._.call(object, arg)`
|
||||
// or shortcut `_prop._.call(object, arg)`
|
||||
let class_binding = class_binding.unwrap();
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
|
||||
// TODO: Ensure there are tests for nested classes with references to private static props
|
||||
// of outer class inside inner class, to make sure we're getting the right `class_bindings`.
|
||||
|
||||
// If `object` is reference to class name, there's no need for the class brand assertion
|
||||
// TODO: Combine this check with `duplicate_object`. Both check if `object` is an identifier,
|
||||
// and look up the `SymbolId`
|
||||
if Self::shortcut_static_class(is_declaration, class_binding.symbol_id, &object, ctx)
|
||||
.is_some()
|
||||
if Self::shortcut_static_class(
|
||||
is_declaration,
|
||||
class_bindings.name_symbol_id(),
|
||||
&object,
|
||||
ctx,
|
||||
)
|
||||
.is_some()
|
||||
{
|
||||
// `_prop._`
|
||||
let callee =
|
||||
Self::create_underscore_member_expression(prop_ident, field_expr.span, ctx);
|
||||
(callee, object)
|
||||
} else {
|
||||
let class_binding = class_bindings.get_or_init_temp_binding(ctx);
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
|
||||
// Make 2 copies of `object`
|
||||
let (object1, object2) = self.duplicate_object(object, ctx);
|
||||
|
||||
// `_assertClassBrand(Class, object, _prop)._`
|
||||
// TODO: Ensure there are tests for nested classes with references to private static props
|
||||
// of outer class inside inner class, to make sure we're getting the right `class_binding`.
|
||||
let assert_obj = self.create_assert_class_brand_underscore(
|
||||
class_ident,
|
||||
object1,
|
||||
|
|
@ -268,7 +284,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
let prop_details = self.private_props_stack.find(&field_expr.field);
|
||||
// TODO: Should never be `None` - only because implementation is incomplete.
|
||||
let Some(prop_details) = prop_details else { return };
|
||||
let ResolvedPrivateProp { prop_binding, class_binding, is_static, is_declaration } =
|
||||
let ResolvedPrivateProp { prop_binding, class_bindings, is_static, is_declaration } =
|
||||
prop_details;
|
||||
|
||||
// Note: `transform_static_assignment_expression` and `transform_instance_assignment_expression`
|
||||
|
|
@ -279,11 +295,24 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
let prop_binding = prop_binding.clone();
|
||||
|
||||
if is_static {
|
||||
let class_binding = class_binding.unwrap().clone();
|
||||
// TODO: No temp var is required if able to use shortcut version, so want to skip calling
|
||||
// `class_bindings.get_or_init_temp_binding(ctx)` if shortcut can be used.
|
||||
// But can't pass `class_bindings` as a `&mut ClassBinding` into
|
||||
// `transform_static_assignment_expression` due to borrow-checker restrictions.
|
||||
// If clone it, then any update to `temp` field is not stored globally, so that doesn't work.
|
||||
// Solution will have to be to break up `transform_static_assignment_expression` into 2 methods
|
||||
// for shortcut/no shortcut and do the "can we shortcut?" check here.
|
||||
// Then only create temp var for the "no shortcut" branch, and clone the resulting binding
|
||||
// before passing it to the "no shortcut" method. What a palaver!
|
||||
let class_binding = class_bindings.get_or_init_temp_binding(ctx);
|
||||
let class_binding = class_binding.clone();
|
||||
let class_symbol_id = class_bindings.name_symbol_id();
|
||||
|
||||
self.transform_static_assignment_expression(
|
||||
expr,
|
||||
prop_binding,
|
||||
class_binding,
|
||||
class_symbol_id,
|
||||
is_declaration,
|
||||
ctx,
|
||||
);
|
||||
|
|
@ -314,6 +343,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
expr: &mut Expression<'a>,
|
||||
prop_binding: BoundIdentifier<'a>,
|
||||
class_binding: BoundIdentifier<'a>,
|
||||
class_symbol_id: Option<SymbolId>,
|
||||
is_declaration: bool,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
|
|
@ -326,12 +356,8 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
// Check if object (`object` in `object.#prop`) is a reference to class name
|
||||
// TODO: Combine this check with `duplicate_object`. Both check if `object` is an identifier,
|
||||
// and look up the `SymbolId`.
|
||||
let object_reference_id = Self::shortcut_static_class(
|
||||
is_declaration,
|
||||
class_binding.symbol_id,
|
||||
&field_expr.object,
|
||||
ctx,
|
||||
);
|
||||
let object_reference =
|
||||
Self::shortcut_static_class(is_declaration, class_symbol_id, &field_expr.object, ctx);
|
||||
|
||||
// If `object` is reference to class name, there's no need for the class brand assertion.
|
||||
// `Class.#prop = value` -> `_prop._ = value`
|
||||
|
|
@ -339,7 +365,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
// `Class.#prop &&= value` -> `_prop._ && (_prop._ = 1)`
|
||||
// TODO(improve-on-babel): These shortcuts could be shorter - just swap `Class.#prop` for `_prop._`.
|
||||
// Or does that behave slightly differently if `Class.#prop` is an object with `valueOf` method?
|
||||
if let Some(reference_id) = object_reference_id {
|
||||
if let Some((class_symbol_id, object_reference_id)) = object_reference {
|
||||
// Replace left side of assignment with `_prop._`
|
||||
let field_expr_span = field_expr.span;
|
||||
assign_expr.left = Self::create_underscore_member_expr_target(
|
||||
|
|
@ -349,7 +375,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
);
|
||||
|
||||
// Delete reference for `object` as `object.#prop` has been removed
|
||||
ctx.symbols_mut().delete_resolved_reference(class_binding.symbol_id, reference_id);
|
||||
ctx.symbols_mut().delete_resolved_reference(class_symbol_id, object_reference_id);
|
||||
|
||||
if operator == AssignmentOperator::Assign {
|
||||
// `Class.#prop = value` -> `_prop._ = value`
|
||||
|
|
@ -619,7 +645,7 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
let prop_details = self.private_props_stack.find(&field_expr.field);
|
||||
// TODO: Should never be `None` - only because implementation is incomplete.
|
||||
let Some(prop_details) = prop_details else { return };
|
||||
let ResolvedPrivateProp { prop_binding, class_binding, is_static, is_declaration } =
|
||||
let ResolvedPrivateProp { prop_binding, class_bindings, is_static, is_declaration } =
|
||||
prop_details;
|
||||
|
||||
let prop_ident = prop_binding.create_read_expression(ctx);
|
||||
|
|
@ -649,36 +675,45 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
// (_object$prop = _assertClassBrand(Class, object, _prop)._, ++_object$prop)
|
||||
// )
|
||||
// ```
|
||||
let class_binding = class_binding.unwrap().clone();
|
||||
|
||||
// Check if object (`object` in `object.#prop`) is a reference to class name
|
||||
// TODO: Combine this check with `duplicate_object`. Both check if `object` is an identifier,
|
||||
// and look up the `SymbolId`.
|
||||
let object_reference_id =
|
||||
Self::shortcut_static_class(is_declaration, class_binding.symbol_id, &object, ctx);
|
||||
let object_reference = Self::shortcut_static_class(
|
||||
is_declaration,
|
||||
class_bindings.name_symbol_id(),
|
||||
&object,
|
||||
ctx,
|
||||
);
|
||||
|
||||
// `_assertClassBrand(Class, object, _prop)._` or `_prop._`
|
||||
let (get_expr, object) = if let Some(reference_id) = object_reference_id {
|
||||
let (get_expr, object, class_ident) = if let Some(object_reference) = object_reference {
|
||||
// Delete reference for `object` as `object.#prop` is being removed
|
||||
ctx.symbols_mut().delete_resolved_reference(class_binding.symbol_id, reference_id);
|
||||
let (class_symbol_id, object_reference_id) = object_reference;
|
||||
ctx.symbols_mut().delete_resolved_reference(class_symbol_id, object_reference_id);
|
||||
|
||||
// `_prop._`
|
||||
let get_expr = Self::create_underscore_member_expression(prop_ident, SPAN, ctx);
|
||||
(get_expr, object)
|
||||
(get_expr, object, None)
|
||||
} else {
|
||||
let class_binding = class_bindings.get_or_init_temp_binding(ctx);
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
let class_ident2 = class_binding.create_read_expression(ctx);
|
||||
|
||||
// Make 2 copies of `object`
|
||||
let (object1, object2) = self.duplicate_object(object, ctx);
|
||||
|
||||
// `_assertClassBrand(Class, object, _prop)._`
|
||||
let get_call = self.create_assert_class_brand_underscore(
|
||||
class_binding.create_read_expression(ctx),
|
||||
class_ident,
|
||||
object2,
|
||||
prop_ident,
|
||||
SPAN,
|
||||
ctx,
|
||||
);
|
||||
(get_call, object1)
|
||||
(get_call, object1, Some(class_ident2))
|
||||
};
|
||||
|
||||
// `_object$prop = _assertClassBrand(Class, object, _prop)._`
|
||||
self.ctx.var_declarations.insert_var(&temp_binding, None, ctx);
|
||||
let assignment = create_assignment(&temp_binding, get_expr, ctx);
|
||||
|
|
@ -697,9 +732,8 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
.ast
|
||||
.expression_sequence(SPAN, ctx.ast.vec_from_array([assignment, update_expr]));
|
||||
|
||||
// `_assertClassBrand(Class, object, <value>)`
|
||||
if object_reference_id.is_none() {
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
// If no shortcut, wrap in `_assertClassBrand(Class, object, <value>)`
|
||||
if let Some(class_ident) = class_ident {
|
||||
value = self.create_assert_class_brand(class_ident, object, value, ctx);
|
||||
}
|
||||
|
||||
|
|
@ -731,9 +765,8 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
]),
|
||||
);
|
||||
|
||||
// `_assertClassBrand(Class, object, <value>)`
|
||||
if object_reference_id.is_none() {
|
||||
let class_ident = class_binding.create_read_expression(ctx);
|
||||
// If no shortcut, wrap in `_assertClassBrand(Class, object, <value>)`
|
||||
if let Some(class_ident) = class_ident {
|
||||
value = self.create_assert_class_brand(class_ident, object, value, ctx);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use oxc_data_structures::stack::SparseStack;
|
|||
use oxc_span::Atom;
|
||||
use oxc_traverse::BoundIdentifier;
|
||||
|
||||
use super::FxIndexMap;
|
||||
use super::{class_bindings::ClassBindings, FxIndexMap};
|
||||
|
||||
/// Stack of private props defined by classes.
|
||||
///
|
||||
|
|
@ -36,23 +36,22 @@ impl<'a> PrivatePropsStack<'a> {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
#[expect(dead_code)]
|
||||
pub fn last_mut(&mut self) -> Option<&mut PrivateProps<'a>> {
|
||||
self.stack.last_mut()
|
||||
}
|
||||
|
||||
/// Lookup details of private property referred to by `ident`.
|
||||
pub fn find<'b>(
|
||||
&'b self,
|
||||
&'b mut self,
|
||||
ident: &PrivateIdentifier<'a>,
|
||||
) -> Option<ResolvedPrivateProp<'a, 'b>> {
|
||||
// Check for binding in closest class first, then enclosing classes
|
||||
// TODO: Check there are tests for bindings in enclosing classes.
|
||||
for private_props in self.stack.as_slice().iter().rev() {
|
||||
for private_props in self.stack.as_mut_slice().iter_mut().rev() {
|
||||
if let Some(prop) = private_props.props.get(&ident.name) {
|
||||
return Some(ResolvedPrivateProp {
|
||||
prop_binding: &prop.binding,
|
||||
class_binding: private_props.class_binding.as_ref(),
|
||||
class_bindings: &mut private_props.class_bindings,
|
||||
is_static: prop.is_static,
|
||||
is_declaration: private_props.is_declaration,
|
||||
});
|
||||
|
|
@ -68,8 +67,8 @@ pub(super) struct PrivateProps<'a> {
|
|||
/// Private properties for class. Indexed by property name.
|
||||
// TODO(improve-on-babel): Order that temp vars are created in is not important. Use `FxHashMap` instead.
|
||||
pub props: FxIndexMap<Atom<'a>, PrivateProp<'a>>,
|
||||
/// Binding for class, if class has name
|
||||
pub class_binding: Option<BoundIdentifier<'a>>,
|
||||
/// Bindings for class name and temp var for class
|
||||
pub class_bindings: ClassBindings<'a>,
|
||||
/// `true` for class declaration, `false` for class expression
|
||||
pub is_declaration: bool,
|
||||
}
|
||||
|
|
@ -86,8 +85,8 @@ pub(super) struct PrivateProp<'a> {
|
|||
pub(super) struct ResolvedPrivateProp<'a, 'b> {
|
||||
/// Binding for temp var representing the property
|
||||
pub prop_binding: &'b BoundIdentifier<'a>,
|
||||
/// Binding for class (if it has one)
|
||||
pub class_binding: Option<&'b BoundIdentifier<'a>>,
|
||||
/// Bindings for class name and temp var for class
|
||||
pub class_bindings: &'b mut ClassBindings<'a>,
|
||||
/// `true` if is a static property
|
||||
pub is_static: bool,
|
||||
/// `true` if class which defines this property is a class declaration
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ use oxc_ast::{
|
|||
visit::{walk_mut, VisitMut},
|
||||
};
|
||||
use oxc_syntax::scope::ScopeFlags;
|
||||
use oxc_traverse::{BoundIdentifier, TraverseCtx};
|
||||
use oxc_traverse::TraverseCtx;
|
||||
|
||||
use super::{ClassName, ClassProperties};
|
||||
use super::ClassProperties;
|
||||
|
||||
impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
||||
/// Transform any `this` in static property initializer to reference to class name,
|
||||
|
|
@ -18,32 +18,59 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
value: &mut Expression<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
// TODO: Insert temp var if class binding is mutated.
|
||||
// TODO: Replace references to class name with temp var
|
||||
|
||||
let ClassName::Binding(class_binding) = &self.class_name else {
|
||||
// Binding is initialized in 1st pass in `transform_class` when a static prop is found
|
||||
unreachable!();
|
||||
};
|
||||
// Unfortunately have to clone, because also pass `&mut self` to `StaticInitializerVisitor::new`
|
||||
let class_binding = class_binding.clone();
|
||||
self.set_is_transforming_static_property_initializers(true);
|
||||
|
||||
let mut replacer = StaticInitializerVisitor::new(class_binding, self, ctx);
|
||||
let mut replacer = StaticInitializerVisitor::new(self, ctx);
|
||||
replacer.visit_expression(value);
|
||||
|
||||
self.set_is_transforming_static_property_initializers(false);
|
||||
}
|
||||
|
||||
/// Set flag on `ClassBindings` that we are/are not currently transforming static prop initializers.
|
||||
///
|
||||
/// The logic around which bindings are used for transforming private fields is complex,
|
||||
/// so we use this to make sure the logic is correct.
|
||||
///
|
||||
/// In debug builds, `ClassBindings::get_or_init_temp_binding` will panic if we end up transforming
|
||||
/// a static private field, and there's no `temp` binding - which should be impossible.
|
||||
#[inline(always)] // `#[inline(always)]` because is no-op in release builds
|
||||
#[allow(clippy::inline_always)]
|
||||
#[cfg_attr(not(debug_assertions), expect(unused_variables, clippy::unused_self))]
|
||||
fn set_is_transforming_static_property_initializers(&mut self, is_it: bool) {
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
self.class_bindings.currently_transforming_static_property_initializers = is_it;
|
||||
if let Some(private_props) = self.private_props_stack.last_mut() {
|
||||
private_props.class_bindings.currently_transforming_static_property_initializers =
|
||||
is_it;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Visitor to transform:
|
||||
///
|
||||
/// 1. `this` to class name.
|
||||
/// `class C { static x = this.y; }` -> `class C {}; C.x = C.y;`
|
||||
/// 1. `this` to class temp var.
|
||||
/// * Class declaration: `class C { static x = this.y; }`
|
||||
/// -> `var _C; class C {}; _C = C; C.x = _C.y;`
|
||||
/// * Class expression: `x = class C { static x = this.y; }`
|
||||
/// -> `var _C; x = (_C = class C {}, _C.x = _C.y)`
|
||||
/// 2. Private fields which refer to private props of this class.
|
||||
/// `class C { static #x = 123; static.#y = this.#x; }`
|
||||
/// -> `class C {}; var _x = { _: 123 }; _defineProperty(C, "y", _assertClassBrand(C, C, _x)._);`
|
||||
/// * Class declaration: `class C { static #x = 123; static y = this.#x; }`
|
||||
/// -> `var _C; class C {}; _C = C; var _x = { _: 123 }; C.y = _assertClassBrand(_C, _C, _x)._;`
|
||||
/// * Class expression: `x = class C { static #x = 123; static y = this.#x; }`
|
||||
/// -> `var _C, _x; x = (_C = class C {}, _x = { _: 123 }, _C.y = _assertClassBrand(_C, _C, _x)._), _C)`
|
||||
///
|
||||
/// Reason we need to do this is because the initializer is being moved from inside the class to outside.
|
||||
/// `this` outside the class refers to a different `this`, and private fields are only valid within the
|
||||
/// class body. So we need to transform them.
|
||||
///
|
||||
/// Note that for class declarations, assignments are made to properties of original class name `C`,
|
||||
/// but temp var `_C` is used in replacements for `this` and private fields. This is because class binding
|
||||
/// `C` can be mutated, and the initializer may contain functions which are not executed immediately.
|
||||
///
|
||||
/// If this class defines no private properties, we only need to transform `this`, so can skip traversing
|
||||
/// into functions and other contexts which have their own `this`.
|
||||
///
|
||||
|
|
@ -52,8 +79,6 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
|
|||
//
|
||||
// TODO: Also re-parent child scopes.
|
||||
struct StaticInitializerVisitor<'a, 'ctx, 'v> {
|
||||
/// Binding for class (temp var).
|
||||
class_binding: BoundIdentifier<'a>,
|
||||
/// `true` if class has private properties.
|
||||
class_has_private_props: bool,
|
||||
/// Incremented when entering a different `this` context, decremented when exiting it.
|
||||
|
|
@ -67,12 +92,10 @@ struct StaticInitializerVisitor<'a, 'ctx, 'v> {
|
|||
|
||||
impl<'a, 'ctx, 'v> StaticInitializerVisitor<'a, 'ctx, 'v> {
|
||||
fn new(
|
||||
class_binding: BoundIdentifier<'a>,
|
||||
class_properties: &'v mut ClassProperties<'a, 'ctx>,
|
||||
ctx: &'v mut TraverseCtx<'a>,
|
||||
) -> Self {
|
||||
Self {
|
||||
class_binding,
|
||||
class_has_private_props: class_properties.private_props_stack.last().is_some(),
|
||||
this_depth: 0,
|
||||
class_properties,
|
||||
|
|
@ -82,6 +105,30 @@ impl<'a, 'ctx, 'v> StaticInitializerVisitor<'a, 'ctx, 'v> {
|
|||
}
|
||||
|
||||
impl<'a, 'ctx, 'v> VisitMut<'a> for StaticInitializerVisitor<'a, 'ctx, 'v> {
|
||||
// TODO: Also need to call class visitors so private props stack is in correct state.
|
||||
// Otherwise, in this example, `#x` in `getInnerX` is resolved incorrectly
|
||||
// and `getInnerX()` will return 1 instead of 2.
|
||||
// We have to visit the inner class now rather than later after exiting outer class so that
|
||||
// `#y` in `getOuterY` resolves correctly too.
|
||||
// ```js
|
||||
// class Outer {
|
||||
// #x = 1;
|
||||
// #y = 1;
|
||||
// static inner = class Inner {
|
||||
// #x = 2;
|
||||
// getInnerX() {
|
||||
// return this.#x; // Should equal 2
|
||||
// }
|
||||
// getOuterY() {
|
||||
// return this.#y; // Should equal 1
|
||||
// }
|
||||
// };
|
||||
// }
|
||||
// ```
|
||||
//
|
||||
// Need to save all per-class state (`insert_before` etc), and restore it again after.
|
||||
// Using a stack would be overkill because nested classes in static blocks will be rare.
|
||||
|
||||
#[inline]
|
||||
fn visit_expression(&mut self, expr: &mut Expression<'a>) {
|
||||
match expr {
|
||||
|
|
@ -219,7 +266,16 @@ impl<'a, 'ctx, 'v> StaticInitializerVisitor<'a, 'ctx, 'v> {
|
|||
/// Replace `this` with reference to class name binding.
|
||||
fn replace_this_with_class_name(&mut self, expr: &mut Expression<'a>, span: Span) {
|
||||
if self.this_depth == 0 {
|
||||
*expr = self.class_binding.create_spanned_read_expression(span, self.ctx);
|
||||
// `PrivateProps` is the source of truth for bindings if class has private props
|
||||
// because other visitors which transform private fields may create a temp binding
|
||||
// and store it on `PrivateProps`
|
||||
let class_bindings = match self.class_properties.private_props_stack.last_mut() {
|
||||
Some(private_props) => &mut private_props.class_bindings,
|
||||
None => &mut self.class_properties.class_bindings,
|
||||
};
|
||||
|
||||
let class_binding = class_bindings.get_or_init_temp_binding(self.ctx);
|
||||
*expr = class_binding.create_spanned_read_expression(span, self.ctx);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -351,7 +351,18 @@ x Output mismatch
|
|||
x Output mismatch
|
||||
|
||||
* assumption-setPublicClassFields/static-this/input.js
|
||||
x Output mismatch
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(0): [ScopeId(1)]
|
||||
rebuilt : ScopeId(0): [ScopeId(1), ScopeId(2)]
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(1): [ScopeId(2)]
|
||||
rebuilt : ScopeId(1): []
|
||||
Scope flags mismatch:
|
||||
after transform: ScopeId(2): ScopeFlags(StrictMode | Function | Arrow)
|
||||
rebuilt : ScopeId(2): ScopeFlags(Function | Arrow)
|
||||
Scope parent mismatch:
|
||||
after transform: ScopeId(2): Some(ScopeId(1))
|
||||
rebuilt : ScopeId(2): Some(ScopeId(0))
|
||||
|
||||
* assumption-setPublicClassFields/super-expression/input.js
|
||||
x Output mismatch
|
||||
|
|
@ -536,9 +547,6 @@ rebuilt : ScopeId(3): ScopeFlags(Function)
|
|||
Scope parent mismatch:
|
||||
after transform: ScopeId(2): Some(ScopeId(1))
|
||||
rebuilt : ScopeId(3): Some(ScopeId(0))
|
||||
Symbol reference IDs mismatch for "Foo":
|
||||
after transform: SymbolId(0): [ReferenceId(1), ReferenceId(4)]
|
||||
rebuilt : SymbolId(0): [ReferenceId(1)]
|
||||
|
||||
* private/static-class-binding/input.js
|
||||
x Output mismatch
|
||||
|
|
@ -553,7 +561,18 @@ x Output mismatch
|
|||
x Output mismatch
|
||||
|
||||
* private/static-this/input.js
|
||||
x Output mismatch
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(0): [ScopeId(1)]
|
||||
rebuilt : ScopeId(0): [ScopeId(1), ScopeId(2)]
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(1): [ScopeId(2)]
|
||||
rebuilt : ScopeId(1): []
|
||||
Scope flags mismatch:
|
||||
after transform: ScopeId(2): ScopeFlags(StrictMode | Function | Arrow)
|
||||
rebuilt : ScopeId(2): ScopeFlags(Function | Arrow)
|
||||
Scope parent mismatch:
|
||||
after transform: ScopeId(2): Some(ScopeId(1))
|
||||
rebuilt : ScopeId(2): Some(ScopeId(0))
|
||||
|
||||
* private/super-expression/input.js
|
||||
x Output mismatch
|
||||
|
|
@ -853,7 +872,18 @@ x Output mismatch
|
|||
x Output mismatch
|
||||
|
||||
* public/static-this/input.js
|
||||
x Output mismatch
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(0): [ScopeId(1)]
|
||||
rebuilt : ScopeId(0): [ScopeId(1), ScopeId(2)]
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(1): [ScopeId(2)]
|
||||
rebuilt : ScopeId(1): []
|
||||
Scope flags mismatch:
|
||||
after transform: ScopeId(2): ScopeFlags(StrictMode | Function | Arrow)
|
||||
rebuilt : ScopeId(2): ScopeFlags(Function | Arrow)
|
||||
Scope parent mismatch:
|
||||
after transform: ScopeId(2): Some(ScopeId(1))
|
||||
rebuilt : ScopeId(2): Some(ScopeId(0))
|
||||
|
||||
* public/super-expression/input.js
|
||||
x Output mismatch
|
||||
|
|
@ -915,7 +945,18 @@ x Output mismatch
|
|||
x Output mismatch
|
||||
|
||||
* public-loose/static-this/input.js
|
||||
x Output mismatch
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(0): [ScopeId(1)]
|
||||
rebuilt : ScopeId(0): [ScopeId(1), ScopeId(2)]
|
||||
Scope children mismatch:
|
||||
after transform: ScopeId(1): [ScopeId(2)]
|
||||
rebuilt : ScopeId(1): []
|
||||
Scope flags mismatch:
|
||||
after transform: ScopeId(2): ScopeFlags(StrictMode | Function | Arrow)
|
||||
rebuilt : ScopeId(2): ScopeFlags(Function | Arrow)
|
||||
Scope parent mismatch:
|
||||
after transform: ScopeId(2): Some(ScopeId(1))
|
||||
rebuilt : ScopeId(2): Some(ScopeId(0))
|
||||
|
||||
* public-loose/super-expression/input.js
|
||||
x Output mismatch
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ Error: 'eval' and 'arguments' cannot be used as a binding identifier in strict m
|
|||
❯ ssrTransformScript ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:52381:11
|
||||
❯ loadAndTransform ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:51979:72
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noUninitializedPrivateFieldAccess-static-private-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noUninitializedPrivateFieldAccess-static-private-exec.test.js ]
|
||||
SyntaxError: Private field '#x' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-super-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-super-exec.test.js ]
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-delete-super-property-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-delete-super-property-exec.test.js ]
|
||||
|
|
@ -28,7 +28,7 @@ Error: Invalid access to super
|
|||
❯ ssrTransformScript ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:52381:11
|
||||
❯ loadAndTransform ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:51979:72
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-nested-class-super-property-in-accessor-key-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-nested-class-super-property-in-accessor-key-exec.test.js ]
|
||||
Error: Unexpected token `[`. Expected * for generator, private key, identifier or async
|
||||
|
|
@ -38,148 +38,148 @@ Error: Unexpected token `[`. Expected * for generator, private key, identifier o
|
|||
❯ ssrTransformScript ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:52381:11
|
||||
❯ loadAndTransform ../../node_modules/.pnpm/vite@5.4.11_@types+node@22.9.1/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js:51979:72
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-access-before-declaration-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-access-before-declaration-exec.test.js ]
|
||||
SyntaxError: Private field '#p' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-1-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-1-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-2-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-2-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-3-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-3-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-static-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-array-pattern-static-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-1-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-1-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-2-exec-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-2-exec-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-3-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-3-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-static-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-destructuring-object-pattern-static-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-access-before-declaration-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-access-before-declaration-exec.test.js ]
|
||||
SyntaxError: Private field '#p' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-1-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-1-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-2-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-2-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-3-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-3-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-static-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-array-pattern-static-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-1-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-1-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-2-exec-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-2-exec-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-3-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-3-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-static-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-destructuring-object-pattern-static-exec.test.js ]
|
||||
SyntaxError: Private field '#client' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-nested-class-computed-redeclared-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-nested-class-computed-redeclared-exec.test.js ]
|
||||
SyntaxError: Private field '#foo' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-property-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-property-exec.test.js ]
|
||||
SyntaxError: Private field '#x' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-property-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-property-exec.test.js ]
|
||||
SyntaxError: Private field '#x' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-parenthesized-optional-member-call-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-parenthesized-optional-member-call-exec.test.js ]
|
||||
SyntaxError: Private field '#m' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-nested-class-computed-redeclared-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-nested-class-computed-redeclared-exec.test.js ]
|
||||
SyntaxError: Private field '#foo' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-property-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-property-exec.test.js ]
|
||||
SyntaxError: Private field '#x' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-property-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-property-exec.test.js ]
|
||||
SyntaxError: Private field '#x' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-parenthesized-optional-member-call-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-parenthesized-optional-member-call-exec.test.js ]
|
||||
SyntaxError: Private field '#m' must be declared in an enclosing class
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-regression-7371-exec.test.js [ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-regression-7371-exec.test.js ]
|
||||
SyntaxError: 'super' keyword unexpected here
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/90]⎯
|
||||
|
||||
⎯⎯⎯⎯⎯⎯ Failed Tests 57 ⎯⎯⎯⎯⎯⎯⎯
|
||||
⎯⎯⎯⎯⎯⎯ Failed Tests 52 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:110:10
|
||||
108| var _x = { _: 1 };
|
||||
109| var _m = { _: function() {
|
||||
110| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:112:10
|
||||
110| var _x = { _: 1 };
|
||||
111| var _m = { _: function() {
|
||||
112| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
111| } };
|
||||
112| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:20:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:114:6
|
||||
113| } };
|
||||
114| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:21:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-before-member-call-exec.test.js:116:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-cast-to-boolean-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -194,7 +194,7 @@ TypeError: Private element is not present on this object
|
|||
❯ Function.testNullish fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-cast-to-boolean-exec.test.js:89:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-noDocumentAll-optional-chain-cast-to-boolean-exec.test.js:105:4
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-class-binding-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
|
@ -212,7 +212,7 @@ null
|
|||
| ^
|
||||
11| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-infer-name-exec.test.js > exec
|
||||
AssertionError: expected '_Class' to be 'Foo' // Object.is equality
|
||||
|
|
@ -227,25 +227,7 @@ Received: "_Class"
|
|||
| ^
|
||||
9| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[39/95]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-this-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
||||
- Expected:
|
||||
[Function A]
|
||||
|
||||
+ Received:
|
||||
null
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-assumption-setPublicClassFields-static-this-exec.test.js:13:22
|
||||
11| A = null;
|
||||
12| expect(oldA.self).toBe(oldA);
|
||||
13| expect(oldA.getA()).toBe(oldA);
|
||||
| ^
|
||||
14| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[40/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[39/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-nested-class-super-call-in-decorator-exec.test.js > exec
|
||||
AssertionError: expected undefined to be 'hello' // Object.is equality
|
||||
|
|
@ -263,7 +245,7 @@ undefined
|
|||
| ^
|
||||
22| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[41/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[40/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-nested-class-super-property-in-decorator-exec.test.js > exec
|
||||
AssertionError: expected undefined to be 'hello' // Object.is equality
|
||||
|
|
@ -281,7 +263,7 @@ undefined
|
|||
| ^
|
||||
23| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[42/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[41/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-constructor-collision-exec.test.js > exec
|
||||
AssertionError: expected undefined to be 'bar' // Object.is equality
|
||||
|
|
@ -300,7 +282,7 @@ undefined
|
|||
19| expect("bar" in f).toBe(false);
|
||||
20| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[43/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[42/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-constructor-collision-exec.test.js > exec
|
||||
AssertionError: expected undefined to be 'bar' // Object.is equality
|
||||
|
|
@ -319,7 +301,7 @@ undefined
|
|||
19| expect("bar" in f).toBe(false);
|
||||
20| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[44/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[43/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-nested-class-extends-computed-exec.test.js > exec
|
||||
AssertionError: expected [Function] to not throw an error but 'TypeError: Private element is not pre…' was thrown
|
||||
|
|
@ -337,31 +319,31 @@ undefined
|
|||
| ^
|
||||
31| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[45/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[44/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:109:10
|
||||
107| var _x = { _: 1 };
|
||||
108| var _m = { _: function() {
|
||||
109| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:111:10
|
||||
109| var _x = { _: 1 };
|
||||
110| var _m = { _: function() {
|
||||
111| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
110| } };
|
||||
111| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:19:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:113:6
|
||||
112| } };
|
||||
113| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:20:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-exec.test.js:115:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[46/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[45/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-with-transform-exec.test.js:31:168
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-with-transform-exec.test.js:32:168
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-with-transform-exec.test.js:113:6
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-member-call-with-transform-exec.test.js:115:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[47/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[46/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-property-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -370,7 +352,7 @@ TypeError: Private element is not present on this object
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-before-property-with-transform-exec.test.js:110:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[48/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[47/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-cast-to-boolean-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -385,7 +367,7 @@ TypeError: Private element is not present on this object
|
|||
❯ Function.testNullish fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-cast-to-boolean-exec.test.js:89:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-cast-to-boolean-exec.test.js:105:4
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[49/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[48/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-delete-property-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -399,7 +381,7 @@ TypeError: Private element is not present on this object
|
|||
58| expect(delete _assertClassBrand(Foo, o?.Foo, _self)._.self.unicorn)…
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-delete-property-exec.test.js:92:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[50/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[49/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-delete-property-with-transform-exec.test.js > exec
|
||||
AssertionError: expected function to throw an error, but it didn't
|
||||
|
|
@ -407,94 +389,94 @@ AssertionError: expected function to throw an error, but it didn't
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-delete-property-with-transform-exec.test.js:158:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[51/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[50/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:42:10
|
||||
40| var _x = { _: 1 };
|
||||
41| var _m = { _: function() {
|
||||
42| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:44:10
|
||||
42| var _x = { _: 1 };
|
||||
43| var _m = { _: function() {
|
||||
44| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
43| } };
|
||||
44| var _self = { _: Foo };
|
||||
❯ f fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:18:57
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:33:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:46:6
|
||||
45| } };
|
||||
46| var _self = { _: Foo };
|
||||
❯ f fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:19:57
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:34:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-exec.test.js:48:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[52/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[51/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ _ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:57:10
|
||||
55| var _x = { _: 1 };
|
||||
56| var _m = { _: function() {
|
||||
57| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ _ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:59:10
|
||||
57| var _x = { _: 1 };
|
||||
58| var _m = { _: function() {
|
||||
59| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
58| } };
|
||||
59| var _self = { _: Foo };
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:44:181
|
||||
❯ j fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:45:6
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:52:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:61:6
|
||||
60| } };
|
||||
61| var _self = { _: Foo };
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:45:181
|
||||
❯ j fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:46:6
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:53:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-in-function-param-with-transform-exec.test.js:63:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[53/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[52/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:112:10
|
||||
110| var _x = { _: 1 };
|
||||
111| var _m = { _: function() {
|
||||
112| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:114:10
|
||||
112| var _x = { _: 1 };
|
||||
113| var _m = { _: function() {
|
||||
114| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
113| } };
|
||||
114| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:19:17
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:116:6
|
||||
115| } };
|
||||
116| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:20:17
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-exec.test.js:118:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[54/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[53/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:112:10
|
||||
110| var _x = { _: 1 };
|
||||
111| var _m = { _: function() {
|
||||
112| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:114:10
|
||||
112| var _x = { _: 1 };
|
||||
113| var _m = { _: function() {
|
||||
114| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
113| } };
|
||||
114| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:22:142
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:116:6
|
||||
115| } };
|
||||
116| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:23:142
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-member-optional-call-with-transform-exec.test.js:118:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[55/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[54/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:112:10
|
||||
110| var _x = { _: 1 };
|
||||
111| var _m = { _: function() {
|
||||
112| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:114:10
|
||||
112| var _x = { _: 1 };
|
||||
113| var _m = { _: function() {
|
||||
114| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
113| } };
|
||||
114| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:19:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:116:6
|
||||
115| } };
|
||||
116| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:20:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-exec.test.js:118:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[56/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[55/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-with-transform-exec.test.js:34:269
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-with-transform-exec.test.js:35:269
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-with-transform-exec.test.js:116:6
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-member-call-with-transform-exec.test.js:118:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[57/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[56/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-property-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -503,7 +485,7 @@ TypeError: Private element is not present on this object
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-optional-chain-optional-property-with-transform-exec.test.js:113:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[58/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[57/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-class-binding-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
|
@ -521,7 +503,7 @@ null
|
|||
| ^
|
||||
18| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[59/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[58/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-shadow-exec.test.js > exec
|
||||
TypeError: e.has is not a function
|
||||
|
|
@ -536,25 +518,7 @@ TypeError: e.has is not a function
|
|||
❯ Function.method fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-shadow-exec.test.js:12:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-shadow-exec.test.js:16:14
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[60/95]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-this-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
||||
- Expected:
|
||||
[Function A]
|
||||
|
||||
+ Received:
|
||||
null
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-loose-static-this-exec.test.js:20:32
|
||||
18| A = null;
|
||||
19| expect(oldA.extract().self).toBe(oldA);
|
||||
20| expect(oldA.extract().getA()).toBe(oldA);
|
||||
| ^
|
||||
21| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[61/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[59/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-nested-class-extends-computed-exec.test.js > exec
|
||||
AssertionError: expected [Function] to not throw an error but 'TypeError: Private element is not pre…' was thrown
|
||||
|
|
@ -572,31 +536,31 @@ undefined
|
|||
| ^
|
||||
32| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[62/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[60/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:110:10
|
||||
108| var _x = { _: 1 };
|
||||
109| var _m = { _: function() {
|
||||
110| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:112:10
|
||||
110| var _x = { _: 1 };
|
||||
111| var _m = { _: function() {
|
||||
112| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
111| } };
|
||||
112| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:20:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:114:6
|
||||
113| } };
|
||||
114| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:21:46
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-exec.test.js:116:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[63/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[61/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-with-transform-exec.test.js:32:168
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-with-transform-exec.test.js:33:168
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-with-transform-exec.test.js:114:6
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-member-call-with-transform-exec.test.js:116:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[64/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[62/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-property-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -605,7 +569,7 @@ TypeError: Private element is not present on this object
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-before-property-with-transform-exec.test.js:111:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[65/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[63/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-cast-to-boolean-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -620,7 +584,7 @@ TypeError: Private element is not present on this object
|
|||
❯ Function.testNullish fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-cast-to-boolean-exec.test.js:89:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-cast-to-boolean-exec.test.js:105:4
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[66/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[64/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-delete-property-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -634,7 +598,7 @@ TypeError: Private element is not present on this object
|
|||
59| expect(delete _assertClassBrand(Foo, o?.Foo, _self)._.self.unicorn)…
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-delete-property-exec.test.js:93:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[67/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[65/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-delete-property-with-transform-exec.test.js > exec
|
||||
AssertionError: expected function to throw an error, but it didn't
|
||||
|
|
@ -642,94 +606,94 @@ AssertionError: expected function to throw an error, but it didn't
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-delete-property-with-transform-exec.test.js:158:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[68/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[66/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:43:10
|
||||
41| var _x = { _: 1 };
|
||||
42| var _m = { _: function() {
|
||||
43| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:45:10
|
||||
43| var _x = { _: 1 };
|
||||
44| var _m = { _: function() {
|
||||
45| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
44| } };
|
||||
45| var _self = { _: Foo };
|
||||
❯ f fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:19:57
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:34:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:47:6
|
||||
46| } };
|
||||
47| var _self = { _: Foo };
|
||||
❯ f fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:20:57
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:35:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-exec.test.js:49:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[69/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[67/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ _ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:58:10
|
||||
56| var _x = { _: 1 };
|
||||
57| var _m = { _: function() {
|
||||
58| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ _ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:60:10
|
||||
58| var _x = { _: 1 };
|
||||
59| var _m = { _: function() {
|
||||
60| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
59| } };
|
||||
60| var _self = { _: Foo };
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:45:181
|
||||
❯ j fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:46:6
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:53:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:62:6
|
||||
61| } };
|
||||
62| var _self = { _: Foo };
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:46:181
|
||||
❯ j fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:47:6
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:54:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-in-function-param-with-transform-exec.test.js:64:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[70/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[68/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:113:10
|
||||
111| var _x = { _: 1 };
|
||||
112| var _m = { _: function() {
|
||||
113| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:115:10
|
||||
113| var _x = { _: 1 };
|
||||
114| var _m = { _: function() {
|
||||
115| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
114| } };
|
||||
115| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:20:17
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:117:6
|
||||
116| } };
|
||||
117| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:21:17
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-exec.test.js:119:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[71/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[69/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:113:10
|
||||
111| var _x = { _: 1 };
|
||||
112| var _m = { _: function() {
|
||||
113| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:115:10
|
||||
113| var _x = { _: 1 };
|
||||
114| var _m = { _: function() {
|
||||
115| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
114| } };
|
||||
115| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:23:142
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:117:6
|
||||
116| } };
|
||||
117| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:24:142
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-member-optional-call-with-transform-exec.test.js:119:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[72/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[70/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:113:10
|
||||
111| var _x = { _: 1 };
|
||||
112| var _m = { _: function() {
|
||||
113| return _assertClassBrand(Foo, this, _x)._;
|
||||
❯ Object._ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:115:10
|
||||
113| var _x = { _: 1 };
|
||||
114| var _m = { _: function() {
|
||||
115| return _assertClassBrand(_Foo, this, _x)._;
|
||||
| ^
|
||||
114| } };
|
||||
115| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:20:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:117:6
|
||||
116| } };
|
||||
117| var _self = { _: Foo };
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:21:14
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-exec.test.js:119:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[73/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[71/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
❯ _assertClassBrand ../../node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/assertClassBrand.js:3:9
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-with-transform-exec.test.js:35:269
|
||||
❯ Function.test fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-with-transform-exec.test.js:36:269
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-with-transform-exec.test.js:117:6
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-member-call-with-transform-exec.test.js:119:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[74/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[72/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-property-with-transform-exec.test.js > exec
|
||||
TypeError: Private element is not present on this object
|
||||
|
|
@ -738,7 +702,7 @@ TypeError: Private element is not present on this object
|
|||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-optional-chain-optional-property-with-transform-exec.test.js:114:6
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[75/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[73/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-class-binding-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
|
@ -756,7 +720,7 @@ null
|
|||
| ^
|
||||
18| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[76/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[74/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-self-field-exec.test.js > exec
|
||||
ReferenceError: Foo is not defined
|
||||
|
|
@ -768,7 +732,7 @@ ReferenceError: Foo is not defined
|
|||
15| const { x, y } = f.extract();
|
||||
16| expect(x).toBe(f);
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[77/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[75/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-shadow-exec.test.js > exec
|
||||
TypeError: e.has is not a function
|
||||
|
|
@ -783,25 +747,7 @@ TypeError: e.has is not a function
|
|||
❯ Function.method fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-shadow-exec.test.js:12:11
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-shadow-exec.test.js:16:14
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[78/95]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-this-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
||||
- Expected:
|
||||
[Function A]
|
||||
|
||||
+ Received:
|
||||
null
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-private-static-this-exec.test.js:20:32
|
||||
18| A = null;
|
||||
19| expect(oldA.extract().self).toBe(oldA);
|
||||
20| expect(oldA.extract().getA()).toBe(oldA);
|
||||
| ^
|
||||
21| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[79/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[76/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-computed-toPrimitive-exec.test.js > exec
|
||||
AssertionError: expected [Function] to throw error including '@@toPrimitive must return a primitive…' but got 'Cannot convert object to primitive va…'
|
||||
|
|
@ -817,7 +763,7 @@ Received: "Cannot convert object to primitive value"
|
|||
38| expect(() => class {
|
||||
39| static get [arrayLike]() {
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[80/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[77/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-loose-static-class-binding-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
|
@ -835,7 +781,7 @@ null
|
|||
| ^
|
||||
11| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[81/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[78/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-loose-static-infer-name-exec.test.js > exec
|
||||
AssertionError: expected '_Class' to be 'Foo' // Object.is equality
|
||||
|
|
@ -850,25 +796,7 @@ Received: "_Class"
|
|||
| ^
|
||||
9| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[82/95]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-loose-static-this-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
||||
- Expected:
|
||||
[Function A]
|
||||
|
||||
+ Received:
|
||||
null
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-loose-static-this-exec.test.js:13:22
|
||||
11| A = null;
|
||||
12| expect(oldA.self).toBe(oldA);
|
||||
13| expect(oldA.getA()).toBe(oldA);
|
||||
| ^
|
||||
14| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[83/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[79/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-static-class-binding-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
|
@ -886,7 +814,7 @@ null
|
|||
| ^
|
||||
12| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[84/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[80/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-static-infer-name-exec.test.js > exec
|
||||
AssertionError: expected '_Class' to be 'Foo' // Object.is equality
|
||||
|
|
@ -901,25 +829,7 @@ Received: "_Class"
|
|||
| ^
|
||||
10| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[85/95]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-static-this-exec.test.js > exec
|
||||
AssertionError: expected null to be [Function A] // Object.is equality
|
||||
|
||||
- Expected:
|
||||
[Function A]
|
||||
|
||||
+ Received:
|
||||
null
|
||||
|
||||
❯ fixtures/babel/babel-plugin-transform-class-properties-test-fixtures-public-static-this-exec.test.js:14:22
|
||||
12| A = null;
|
||||
13| expect(oldA.self).toBe(oldA);
|
||||
14| expect(oldA.getA()).toBe(oldA);
|
||||
| ^
|
||||
15| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[86/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[81/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-assumption-noDocumentAll-parenthesized-expression-member-call-exec.test.js > exec
|
||||
TypeError: Cannot read properties of undefined (reading 'x')
|
||||
|
|
@ -933,7 +843,7 @@ TypeError: Cannot read properties of undefined (reading 'x')
|
|||
❯ Foo.test fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-assumption-noDocumentAll-parenthesized-expression-member-call-exec.test.js:25:63
|
||||
❯ fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-assumption-noDocumentAll-parenthesized-expression-member-call-exec.test.js:68:12
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[87/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[82/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-exec.test.js > exec
|
||||
TypeError: Cannot read properties of undefined (reading 'x')
|
||||
|
|
@ -947,7 +857,7 @@ TypeError: Cannot read properties of undefined (reading 'x')
|
|||
❯ Foo.test fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-exec.test.js:25:63
|
||||
❯ fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-exec.test.js:68:12
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[88/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[83/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-loose-exec.test.js > exec
|
||||
TypeError: Cannot read properties of undefined (reading 'x')
|
||||
|
|
@ -961,7 +871,7 @@ TypeError: Cannot read properties of undefined (reading 'x')
|
|||
❯ Foo.test fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-loose-exec.test.js:25:63
|
||||
❯ fixtures/babel/babel-plugin-transform-optional-chaining-test-fixtures-general-parenthesized-expression-member-call-loose-exec.test.js:68:12
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[89/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[84/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-preset-env-test-fixtures-plugins-integration-issue-15170-exec.test.js > exec
|
||||
AssertionError: expected [Function] to not throw an error but 'ReferenceError: x is not defined' was thrown
|
||||
|
|
@ -979,7 +889,7 @@ undefined
|
|||
| ^
|
||||
7| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[90/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[85/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-preset-env-test-fixtures-sanity-check-es2015-constants-exec.test.js > exec
|
||||
TypeError: Assignment to constant variable.
|
||||
|
|
@ -990,7 +900,7 @@ TypeError: Assignment to constant variable.
|
|||
| ^
|
||||
6| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[91/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[86/90]⎯
|
||||
|
||||
FAIL fixtures/babel/babel-preset-env-test-fixtures-sanity-regex-dot-all-exec.test.js > exec
|
||||
AssertionError: expected false to be true // Object.is equality
|
||||
|
|
@ -1009,5 +919,5 @@ AssertionError: expected false to be true // Object.is equality
|
|||
11| expect(/hello.world/su.test(input)).toBe(true);
|
||||
12| })
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[92/95]⎯
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[87/90]⎯
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue