Skip to content

Commit

Permalink
Prevent proxying CanvasGradient in Node platform (#9861)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle committed Nov 16, 2021
1 parent 6c63f7a commit c8b885d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/helpers/helpers.config.js
Expand Up @@ -178,7 +178,8 @@ export function _descriptors(proxy, defaults = {scriptable: true, indexable: tru
}

const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;
const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters';
const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&
(Object.getPrototypeOf(value) === null || value.constructor === Object);

function _cached(target, prop, resolve) {
if (Object.prototype.hasOwnProperty.call(target, prop)) {
Expand Down Expand Up @@ -218,7 +219,7 @@ function _resolveScriptable(prop, value, target, receiver) {
_stack.add(prop);
value = value(_context, _subProxy || receiver);
_stack.delete(prop);
if (isObject(value)) {
if (needsSubResolver(prop, value)) {
// When scriptable option returns an object, create a resolver on that.
value = createSubResolver(_proxy._scopes, _proxy, prop, value);
}
Expand Down
23 changes: 23 additions & 0 deletions test/specs/helpers.config.tests.js
Expand Up @@ -752,6 +752,29 @@ describe('Chart.helpers.config', function() {
expect(fn()).toEqual('ok');
});

it('should not create proxy for objects with custom constructor', function() {
class MyClass {
constructor() {
this.string = 'test string';
}
method(arg) {
return arg === undefined ? 'ok' : 'fail';
}
}

const defaults = {
test: new MyClass()
};

const resolver = _createResolver([{}, defaults]);
const opts = _attachContext(resolver, {index: 1});
const fn = opts.test.method;
expect(typeof fn).toBe('function');
expect(fn()).toEqual('ok');
expect(opts.test.string).toEqual('test string');
expect(opts.test.constructor).toEqual(MyClass);
});

it('should properly set value to object in array of objects', function() {
const defaults = {};
const options = {
Expand Down

0 comments on commit c8b885d

Please sign in to comment.