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) {