* @param {object[]} scopes
* @param {object} [context]
* @param {string[]} [prefixes]
- * @param {{scriptable: boolean, indexable: boolean}} [descriptorDefaults]
+ * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]
*/
createResolver(scopes, context, prefixes = [''], descriptorDefaults) {
const {resolver} = getResolver(this._resolverCache, scopes, prefixes);
function pluginOpts(config, plugin, opts, context) {
const keys = config.pluginScopeKeys(plugin);
const scopes = config.getOptionScopes(opts, keys);
- return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false});
+ return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});
}
* @param {object} proxy - The Proxy returned by `_createResolver`
* @param {object} context - Context object for scriptable/indexable options
* @param {object} [subProxy] - The proxy provided for scriptable options
- * @param {{scriptable: boolean, indexable: boolean}} [descriptorDefaults] - Defaults for descriptors
+ * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults] - Defaults for descriptors
* @private
*/
export function _attachContext(proxy, context, subProxy, descriptorDefaults) {
* Also used by Object.hasOwnProperty.
*/
getOwnPropertyDescriptor(target, prop) {
- return Reflect.getOwnPropertyDescriptor(proxy, prop);
+ return target._descriptors.allKeys
+ ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined
+ : Reflect.getOwnPropertyDescriptor(proxy, prop);
},
/**
* @private
*/
export function _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {
- const {_scriptable = defaults.scriptable, _indexable = defaults.indexable} = proxy;
+ const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;
return {
+ allKeys: _allKeys,
scriptable: _scriptable,
indexable: _indexable,
isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,
chart.notifyPlugins('hook');
expect(plugin.hook).toHaveBeenCalled();
- expect(plugin.hook.calls.first().args[2]).toEqualOptions({a: 42});
+ expect(Object.keys(plugin.hook.calls.first().args[2])).toEqual(['a']);
+ expect(plugin.hook.calls.first().args[2]).toEqual(jasmine.objectContaining({a: 42}));
Chart.unregister(plugin);
});