mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Fix set/delete oprations on Proxies (#8506)
This commit is contained in:
parent
e55a12ce87
commit
639c34f89e
@ -22,6 +22,16 @@ export function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fa
|
||||
override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),
|
||||
};
|
||||
return new Proxy(cache, {
|
||||
/**
|
||||
* A trap for the delete operator.
|
||||
*/
|
||||
deleteProperty(target, prop) {
|
||||
delete target[prop]; // remove from cache
|
||||
delete target._keys; // remove cached keys
|
||||
delete scopes[0][prop]; // remove from top level scope
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* A trap for getting property values.
|
||||
*/
|
||||
@ -63,8 +73,10 @@ export function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fa
|
||||
* A trap for setting property values.
|
||||
*/
|
||||
set(target, prop, value) {
|
||||
scopes[0][prop] = value;
|
||||
return delete target[prop];
|
||||
scopes[0][prop] = value; // set to top level scope
|
||||
delete target[prop]; // remove from cache
|
||||
delete target._keys; // remove cached keys
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -89,6 +101,15 @@ export function _attachContext(proxy, context, subProxy, descriptorDefaults) {
|
||||
override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
|
||||
};
|
||||
return new Proxy(cache, {
|
||||
/**
|
||||
* A trap for the delete operator.
|
||||
*/
|
||||
deleteProperty(target, prop) {
|
||||
delete target[prop]; // remove from cache
|
||||
delete proxy[prop]; // remove from proxy
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* A trap for getting property values.
|
||||
*/
|
||||
@ -130,8 +151,9 @@ export function _attachContext(proxy, context, subProxy, descriptorDefaults) {
|
||||
* A trap for setting property values.
|
||||
*/
|
||||
set(target, prop, value) {
|
||||
proxy[prop] = value;
|
||||
return delete target[prop];
|
||||
proxy[prop] = value; // set to proxy
|
||||
delete target[prop]; // remove from cache
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -637,6 +637,23 @@ describe('Chart.helpers.config', function() {
|
||||
expect(opts instanceof Options).toBeTrue();
|
||||
|
||||
expect(opts.getter).toEqual('options getter');
|
||||
|
||||
expect('test' in opts).toBeFalse();
|
||||
expect(opts.test).toBeUndefined();
|
||||
|
||||
opts.test = true;
|
||||
expect('test' in opts).toBeTrue();
|
||||
expect(opts.test).toBeTrue();
|
||||
|
||||
delete opts.test;
|
||||
expect('test' in opts).toBeFalse();
|
||||
|
||||
opts.test = (ctx) => ctx.index;
|
||||
expect('test' in opts).toBeTrue();
|
||||
expect(opts.test).toBe(1);
|
||||
|
||||
delete opts.test;
|
||||
expect('test' in opts).toBeFalse();
|
||||
});
|
||||
|
||||
describe('_indexable and _scriptable', function() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user