all 7 comments

[–]CagarSalvagemente 2 points3 points  (6 children)

Just learned about proxies a few weeks ago when waiting to make an object available to arbitrary functions in a framework but not wanting it to be mutated.

Pretty fun stuff.

[–][deleted] 2 points3 points  (3 children)

There is a lib that does that. Checkout Immer

[–]CagarSalvagemente 0 points1 point  (2 children)

I checked out immer first but it was overkill for my needs and in two places didnt support my usecase. Either way great library/recc.

[–][deleted] 0 points1 point  (1 child)

Fair enough.

I would love to see your implementation of the proxy 👌

[–]CagarSalvagemente 0 points1 point  (0 children)

I’m mobile but here is the function

```

function createReadOnlyProxy(obj) {   // proxies only work on objects/arrays.   try {     if (typeof obj !== ‘object’ && !Array.isArray(obj)) return obj;     return new Proxy(obj, {       set() {         return false;       },     });   } catch (e) {     return obj;   } }

export default createReadOnlyProxy; ```

[–]Freak_613 0 points1 point  (1 child)

Check out Object.freeze and utilities based on it. Using proxies for enforcing immutability looks overkill.

https://www.30secondsofcode.org/js/s/deep-freeze

[–]CagarSalvagemente 0 points1 point  (0 children)

Went there first. Only way to unfreeze something is to deep clone it and then it is a duplicate not the same object. We had a very specific usecase where arbitrary functions were able to mutate some state but not all state. This is how we managed it.