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