From: Thorsten Lünborg Date: Sat, 22 Oct 2022 09:20:02 +0000 (+0200) Subject: fix(runtime-core): ensure props definition objects are not mutated during props norma... X-Git-Tag: v3.2.42~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=54b6ba32cafcc41fa9b7b85f1f1a306923204177;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core): ensure props definition objects are not mutated during props normalization (close: #6915) (#6916) --- diff --git a/packages/runtime-core/__tests__/componentProps.spec.ts b/packages/runtime-core/__tests__/componentProps.spec.ts index 40725dfcd1..cdb77838e3 100644 --- a/packages/runtime-core/__tests__/componentProps.spec.ts +++ b/packages/runtime-core/__tests__/componentProps.spec.ts @@ -595,4 +595,23 @@ describe('component props', () => { JSON.stringify(attrs) + Object.keys(attrs) ) }) + + // #691ef + test('should not mutate original props long-form definition object', () => { + const props = { + msg: { + type: String + } + } + const Comp = defineComponent({ + props, + render() {} + }) + + const root = nodeOps.createElement('div') + + render(h(Comp, { msg: 'test' }), root) + + expect(Object.keys(props.msg).length).toBe(1) + }) }) diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index 09b487811b..d59a4e9469 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -522,7 +522,7 @@ export function normalizePropsOptions( if (validatePropName(normalizedKey)) { const opt = raw[key] const prop: NormalizedProp = (normalized[normalizedKey] = - isArray(opt) || isFunction(opt) ? { type: opt } : opt) + isArray(opt) || isFunction(opt) ? { type: opt } : { ...opt }) if (prop) { const booleanIndex = getTypeIndex(Boolean, prop.type) const stringIndex = getTypeIndex(String, prop.type)