Skip to content

Commit 26a4160

Browse files
fix
1 parent e1633e9 commit 26a4160

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

packages/next-swc/crates/core/src/server_actions.rs

+27-7
Original file line numberDiff line numberDiff line change
@@ -1511,7 +1511,14 @@ impl VisitMut for ClosureReplacer<'_> {
15111511
}
15121512

15131513
#[derive(Debug, Clone, PartialEq, Eq)]
1514-
struct Name(Id, Vec<(JsWord, bool)>);
1514+
struct NamePart {
1515+
prop: JsWord,
1516+
is_member: bool,
1517+
optional: bool,
1518+
}
1519+
1520+
#[derive(Debug, Clone, PartialEq, Eq)]
1521+
struct Name(Id, Vec<NamePart>);
15151522

15161523
impl From<&'_ Ident> for Name {
15171524
fn from(value: &Ident) -> Self {
@@ -1539,7 +1546,11 @@ impl TryFrom<&'_ MemberExpr> for Name {
15391546
match &value.prop {
15401547
MemberProp::Ident(prop) => {
15411548
let mut obj: Name = value.obj.as_ref().try_into()?;
1542-
obj.1.push((prop.sym.clone(), true));
1549+
obj.1.push(NamePart {
1550+
prop: prop.sym.clone(),
1551+
is_member: true,
1552+
optional: false,
1553+
});
15431554
Ok(obj)
15441555
}
15451556
_ => Err(()),
@@ -1552,10 +1563,14 @@ impl TryFrom<&'_ OptChainExpr> for Name {
15521563

15531564
fn try_from(value: &OptChainExpr) -> Result<Self, Self::Error> {
15541565
match &*value.base {
1555-
OptChainBase::Member(value) => match &value.prop {
1566+
OptChainBase::Member(m) => match &m.prop {
15561567
MemberProp::Ident(prop) => {
1557-
let mut obj: Name = value.obj.as_ref().try_into()?;
1558-
obj.1.push((prop.sym.clone(), false));
1568+
let mut obj: Name = m.obj.as_ref().try_into()?;
1569+
obj.1.push(NamePart {
1570+
prop: prop.sym.clone(),
1571+
is_member: false,
1572+
optional: value.optional,
1573+
});
15591574
Ok(obj)
15601575
}
15611576
_ => Err(()),
@@ -1569,7 +1584,12 @@ impl From<Name> for Expr {
15691584
fn from(value: Name) -> Self {
15701585
let mut expr = Expr::Ident(value.0.into());
15711586

1572-
for (prop, is_member) in value.1.into_iter() {
1587+
for NamePart {
1588+
prop,
1589+
is_member,
1590+
optional,
1591+
} in value.1.into_iter()
1592+
{
15731593
if is_member {
15741594
expr = Expr::Member(MemberExpr {
15751595
span: DUMMY_SP,
@@ -1579,12 +1599,12 @@ impl From<Name> for Expr {
15791599
} else {
15801600
expr = Expr::OptChain(OptChainExpr {
15811601
span: DUMMY_SP,
1582-
question_dot_token: DUMMY_SP,
15831602
base: Box::new(OptChainBase::Member(MemberExpr {
15841603
span: DUMMY_SP,
15851604
obj: expr.into(),
15861605
prop: MemberProp::Ident(Ident::new(prop, DUMMY_SP)),
15871606
})),
1607+
optional,
15881608
});
15891609
}
15901610
}

0 commit comments

Comments
 (0)