ES Proxy for Object.freeze(object)
.
Following proxy does not work correctly, proxy-frozen-object
provide workaround.
// DOES NOT WORK CORRECTLY
const proxied = new Proxy(Object.freeze(object), { ... });
ES Proxy can not proxy frozen object directly.
Following example throw an TypeError
.
TypeError: proxy must report the same value for the non-writable, non-configurable property '"hello"'
const myObject = {
hello: function() { return 'Hello!'; },
bye: function() { return 'Bye!'; }
};
console.log(myObject.hello()); // "Hello!"
console.log(myObject.bye()); // "Bye!"
// Freeze the object
Object.freeze(myObject);
// Create an proxy for myObject
const proxied = new Proxy(myObject, {
get: function(target, name, receiver) {
if (name === 'hello'){
return function() { return 'Hi!'; };
}
return Reflect.get(target, name, receiver);
}
});
// ERROR!
console.log(proxied.hello()); // TypeError: proxy must report the same value for the non-writable, non-configurable property '"hello"'
This library that create an proxy for dummy object.
It is means that this library proxy myObject
indirectly.
Following example proxy myObject
indirectly for avoiding TypeError
.
const myObject = {
hello: function() { return 'Hello!'; },
bye: function() { return 'Bye!'; }
};
console.log(myObject.hello()); // "Hello!"
console.log(myObject.bye()); // "Bye!"
// Freeze the object
Object.freeze(myObject);
// Create an Proxy for {} (dummy object)
const proxied = new Proxy({}, {
get: function(target, name, receiver) {
if (name === 'hello'){
return function() { return 'Hi!'; };
}
// Reflect myObject instead of target
// if it is not `hello` method, return `myObject["hello"]`
return Reflect.get(myObject, name, receiver);
}
});
console.log(proxied.hello()); // "Hi!"
console.log(proxied.bye()); // "Bye!"
proxy-frozen-object
do proxy the target indirectly.
Install with npm:
npm install proxy-frozen-object
proxyHandler
is same API with Methods of the handler object of ES Proxy.
import { createProxyForFrozenObject } from "proxy-frozen-object";
const myObject = {
hello: function() {
return "Hello!";
},
bye: function() {
return "Bye!";
}
};
Object.freeze(myObject);
const proxied = createProxyForFrozenObject(myObject, {
get: function(target, name, receiver) {
if (name === "hello") {
return function() {
return "Hi!";
};
}
return Reflect.get(target, name, receiver);
}
});
console.log(proxied.hello()); // "Hi!"
See Releases page.
Install devDependencies and Run npm test
:
npm test
Pull requests and stars are always welcome.
For bugs and feature requests, please create an issue.
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
MIT © azu