]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
fix(ssr): make skipHydrate compatible with @vue/composition-api
authorEduardo San Martin Morote <posva13@gmail.com>
Wed, 27 Oct 2021 13:35:43 +0000 (15:35 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Wed, 27 Oct 2021 13:35:43 +0000 (15:35 +0200)
packages/pinia/src/store.ts

index 0936d67ed785bc9007efb1546610b669200fdbfb..9ab67fa04f7d4269f4502f959c09ff80646b9a63 100644 (file)
@@ -74,13 +74,19 @@ function mergeReactiveObjects<T extends StateTree>(
 }
 
 const skipHydrateSymbol = __DEV__ ? Symbol('pinia:skipHydration') : Symbol()
+const skipHydrateMap = /*#__PURE__*/ new WeakMap<any, any>()
 
 export function skipHydrate<T = any>(obj: T): T {
-  return Object.defineProperty(obj, skipHydrateSymbol, {})
+  return isVue2
+    ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work...
+      skipHydrateMap.set(obj, 1) && obj
+    : Object.defineProperty(obj, skipHydrateSymbol, {})
 }
 
 function shouldHydrate(obj: any) {
-  return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol)
+  return isVue2
+    ? skipHydrateMap.has(obj)
+    : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol)
 }
 
 const { assign } = Object