nuxt-community / composition-api

Composition API hooks for Nuxt 2.
https://composition-api.nuxtjs.org
MIT License
709 stars 101 forks source link

fix: ssrRef crashes with nested frozen object #598

Open pleinon opened 2 years ago

pleinon commented 2 years ago

🐛 The bug I am using Apollo Client which returns response data as frozen (Object.freeze()) on development mode. Looks like this causes ssrRef.value mutation to crash when frozen data has nested objects:

'get' on proxy: property 'nested' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected '#<Object>' but got '[object Object]')

🛠ī¸ To reproduce Steps to reproduce the behavior:

const crashTest = ssrRef<any | null>(null)
crashTest.value = Object.freeze({
  test: 'works',
  nested: {}, // crash
})

🌈 Expected behaviour ssrRef should be able to handle frozen complex objects.

ℹī¸ Additional context Sample is greatly simplified from my Pinia-state. Crashing code is executed in store during server side useFetch.

pmrotule commented 2 years ago

We're experiencing the same issue and the only workaround we found was to deep-clone all results coming from ApolloClient which is pretty bad for performance. Would be great to have a proper fix 🙏