From: Artyom Tuchkov Date: Thu, 8 Feb 2024 02:57:57 +0000 (+0400) Subject: fix(reactivity): skip non-extensible objects when using `markRaw` (#10289) X-Git-Tag: v3.4.16~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2312184bc335e0d32aa4c0c0b49190b6334849b4;p=thirdparty%2Fvuejs%2Fcore.git fix(reactivity): skip non-extensible objects when using `markRaw` (#10289) close #10288 --- diff --git a/packages/reactivity/__tests__/reactive.spec.ts b/packages/reactivity/__tests__/reactive.spec.ts index 5e1e0922e5..ab953ff891 100644 --- a/packages/reactivity/__tests__/reactive.spec.ts +++ b/packages/reactivity/__tests__/reactive.spec.ts @@ -277,6 +277,11 @@ describe('reactivity/reactive', () => { expect(isReactive(obj.bar)).toBe(false) }) + test('markRaw should skip non-extensible objects', () => { + const obj = Object.seal({ foo: 1 }) + expect(() => markRaw(obj)).not.toThrowError() + }) + test('should not observe non-extensible objects', () => { const obj = reactive({ foo: Object.preventExtensions({ a: 1 }), diff --git a/packages/reactivity/src/reactive.ts b/packages/reactivity/src/reactive.ts index 6e98fedeaf..8b94dd9a47 100644 --- a/packages/reactivity/src/reactive.ts +++ b/packages/reactivity/src/reactive.ts @@ -385,7 +385,9 @@ export type Raw = T & { [RawSymbol]?: true } * @see {@link https://vuejs.org/api/reactivity-advanced.html#markraw} */ export function markRaw(value: T): Raw { - def(value, ReactiveFlags.SKIP, true) + if (Object.isExtensible(value)) { + def(value, ReactiveFlags.SKIP, true) + } return value }