nx-js / observer-util

Transparent reactivity with 100% language coverage. Made with ❤️ and ES6 Proxies.
MIT License
1.2k stars 94 forks source link

Trap "toJSON" to allow serialization of proxies #31

Open CheloXL opened 6 years ago

CheloXL commented 6 years ago

Hi, I just found an issue while trying to store objects on IDB. It seems that IDB can't serialize proxied objects, and throws an error (Serialization error: Can't serialize [object object] on xxx...).

So, in order for me to be able to store these objects, I have to serialize/deserialize the object manually (so effectively removing the proxy).

I was thinking that maybe you can trap the checks for "has toJSON" to return true and then when that method is invoked, return the raw object. That would solve the serialization issue.

If the object already has a toJSON method, you should not have to do anything.

What do you think?

solkimicreb commented 6 years ago

Hi!

I will look into it. In the meantime you can use raw, like:

import { observable, raw } from '@nx-js/observer-util'

const obs = observable({})
const json = raw(obj).toJSON()

See the relevant docs here

CheloXL commented 6 years ago

Yes, I know.. I just wanted to know if I can get rid of that "automagically" :) Thanks!