react-component-isolator
Version:
A simple module that spins up a react app where the only component is the react component you pass in.
62 lines (48 loc) • 1.37 kB
JavaScript
(function() {
var observe = function(obj, callback) {
if (Object(obj) !== obj) {
throw new TypeError('target must be an Object, given ' + obj);
}
if (typeof callback !== 'function') {
throw new Error('observer must be a function, given ' + callback);
}
return new Proxy(obj, {
set(target, propKey, value, receiver) {
var oldVal = target[propKey];
// Don't send change record if value didn't change.
if (oldVal === value) {
return;
}
let type = oldVal === undefined ? 'add' : 'update';
var changeRecord = {
name: propKey,
type: type,
object: target
};
if (type === 'update') {
changeRecord.oldValue = oldVal;
}
target[propKey] = value; // set prop value on target.
// TODO: handle multiple changes in a single callback.
callback([changeRecord]);
},
deleteProperty(target, propKey, receiver) {
// Don't send change record if prop doesn't exist.
if (!(propKey in target)) {
return;
}
var changeRecord = {
name: propKey,
type: 'delete',
object: target,
oldValue: target[propKey]
};
delete target[propKey]; // remove prop from target.
callback([changeRecord]);
}
});
};
if (!Object.observe) {
Object.observe = observe;
}
})();