in packages/eui/scripts/jest/polyfills/mutation_observer.js [237:270]
MutationObserver.prototype.createMutationSearcher = function ($target, config) {
var _this = this;
/** type {Elestuct} */
var $oldstate = Util.clone($target, config); // create the cloned datastructure
/**
* consumes array of mutations we can push to
*
* @param {Array.<MutationRecord>} mutations
*/
return function (mutations) {
var olen = mutations.length;
var dirty;
if (config.charData && $target.nodeType === 3 && $target.nodeValue !== $oldstate.charData) {
mutations.push(new MutationRecord({
type: 'characterData',
target: $target,
oldValue: $oldstate.charData
}));
}
// Alright we check base level changes in attributes... easy
if (config.attr && $oldstate.attr) {
_this.findAttributeMutations(mutations, $target, $oldstate.attr, config.afilter);
}
// check childlist or subtree for mutations
if (config.kids || config.descendents) {
dirty = _this.searchSubtree(mutations, $target, $oldstate, config);
}
// reclone data structure if theres changes
if (dirty || mutations.length !== olen) {
/** type {Elestuct} */
$oldstate = Util.clone($target, config);
}
};
};