From: Folee <597171538@qq.com>
Date: Tue, 2 Sep 2025 08:56:33 +0000 (+0800)
Subject: fix(custom-element): prevent defineCustomElement from mutating the options object...
X-Git-Tag: v3.5.21~18
X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e322436887549c129e61eb58a0084167103451bb;p=thirdparty%2Fvuejs%2Fcore.git
fix(custom-element): prevent defineCustomElement from mutating the options object (#13791)
---
diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts
index 07ea091486..cb09cf4d9e 100644
--- a/packages/runtime-dom/__tests__/customElement.spec.ts
+++ b/packages/runtime-dom/__tests__/customElement.spec.ts
@@ -1774,4 +1774,16 @@ describe('defineCustomElement', () => {
``,
)
})
+
+ test('no unexpected mutation of the 1st argument', () => {
+ const Foo = {
+ name: 'Foo',
+ }
+
+ defineCustomElement(Foo, { shadowRoot: false })
+
+ expect(Foo).toEqual({
+ name: 'Foo',
+ })
+ })
})
diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts
index edf7c43135..0a1aa314ec 100644
--- a/packages/runtime-dom/src/apiCustomElement.ts
+++ b/packages/runtime-dom/src/apiCustomElement.ts
@@ -172,8 +172,8 @@ export function defineCustomElement(
*/
_createApp?: CreateAppFunction,
): VueElementConstructor {
- const Comp = defineComponent(options, extraOptions) as any
- if (isPlainObject(Comp)) extend(Comp, extraOptions)
+ let Comp = defineComponent(options, extraOptions) as any
+ if (isPlainObject(Comp)) Comp = extend({}, Comp, extraOptions)
class VueCustomElement extends VueElement {
static def = Comp
constructor(initialProps?: Record) {