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.
*/
* 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;
}
});
}
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.
*/
* 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;
}
});
}
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() {