Skip to content

Commit 2f5ce4a

Browse files
committed
feat(macros): props allowed to be overridden for defineComponent
1 parent 96f3d50 commit 2f5ce4a

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

packages/macros/src/core/define-component/index.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,21 @@ export function transformDefineComponent(
9090
`, {${hasRestProp ? 'inheritAttrs: false,' : ''} props: {\n${propsString}\n} }`,
9191
)
9292
} else if (argument.type === 'ObjectExpression') {
93-
prependObjectExpression(argument, 'props', `{\n${propsString}\n}`, s)
93+
const resolvedPropsString = `{\n${propsString}\n}`
94+
const prop = prependObjectExpression(
95+
argument,
96+
'props',
97+
resolvedPropsString,
98+
s,
99+
)
100+
if (
101+
prop &&
102+
prop.type === 'ObjectProperty' &&
103+
prop.value.type === 'ObjectExpression'
104+
) {
105+
s.appendLeft(prop.value.start!, `{...${resolvedPropsString}, ...`)
106+
s.appendRight(prop.value.end!, '}')
107+
}
94108
if (hasRestProp) {
95109
prependObjectExpression(argument, 'inheritAttrs', 'false', s)
96110
}
@@ -109,16 +123,16 @@ function prependObjectExpression(
109123
value: string,
110124
s: MagicStringAST,
111125
) {
112-
if (
113-
!argument.properties?.find(
114-
(prop) =>
115-
prop.type === 'ObjectProperty' &&
116-
prop.key.type === 'Identifier' &&
117-
prop.key.name === name,
118-
)
119-
) {
126+
const prop = argument.properties?.find(
127+
(prop) =>
128+
prop.type === 'ObjectProperty' &&
129+
prop.key.type === 'Identifier' &&
130+
prop.key.name === name,
131+
)
132+
if (!prop) {
120133
s.appendRight(argument.start! + 1, `${name}: ${value},`)
121134
}
135+
return prop
122136
}
123137

124138
function getWalkedIds(root: FunctionalNode, propsName: string) {

packages/macros/tests/__snapshots__/fixtures.spec.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const Comp = defineComponent(
2222
<__MACROS_props.Comp />
2323
</div>
2424
},
25-
{props: {
25+
{inheritAttrs: false, name: 'Comp', props: {...{
2626
'bar': { required: true, type: String, default: 'bar' },
2727
'Comp': null,
2828
'modelValue': null,
@@ -33,7 +33,7 @@ const Comp = defineComponent(
3333
}, type: String },
3434
'onUpdate:foo': null,
3535
'fooModifiers': null
36-
},inheritAttrs: false, name: 'Comp' },
36+
}, ...{ Comp: Object }} },
3737
)
3838
3939
const Comp1 = defineComponent((props: { bar: 'bar'; 'onUpdate:bar': any, comp: any }) => {
@@ -120,7 +120,7 @@ const Comp = defineComponent(
120120
<__MACROS_props.Comp />
121121
</div>
122122
},
123-
{props: {
123+
{inheritAttrs: false, name: 'Comp', props: {...{
124124
'bar': { required: true, type: String, default: 'bar' },
125125
'Comp': null,
126126
'modelValue': null,
@@ -131,7 +131,7 @@ const Comp = defineComponent(
131131
}, type: String },
132132
'onUpdate:foo': null,
133133
'fooModifiers': null
134-
},inheritAttrs: false, name: 'Comp' },
134+
}, ...{ Comp: Object }} },
135135
)
136136
137137
const Comp1 = defineComponent((props: { bar: 'bar'; 'onUpdate:bar': any, comp: any }) => {

packages/macros/tests/fixtures/define-component.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const Comp = defineComponent(
1616
<Comp />
1717
</div>
1818
},
19-
{ name: 'Comp' },
19+
{ name: 'Comp', props: { Comp: Object } },
2020
)
2121

2222
const Comp1 = defineComponent((props: { bar: 'bar'; 'onUpdate:bar': any, comp: any }) => {

0 commit comments

Comments
 (0)