yhtml5-test
Version:
A test framework for front-end projects
60 lines (54 loc) • 2.02 kB
JavaScript
var reactFrameStack = []; /**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// This is a stripped down barebones version of this proposal:
// https://gist.github.com/sebmarkbage/bdefa100f19345229d526d0fdd22830f
// We're implementing just enough to get the invalid element type warnings
// to display the component stack in React 15.6+:
// https://github.com/facebook/react/pull/9679
/// TODO: a more comprehensive implementation.
var registerReactStack = function registerReactStack() {
if (typeof console !== 'undefined') {
// $FlowFixMe
console.reactStack = function (frames) {
return reactFrameStack.push(frames);
};
// $FlowFixMe
console.reactStackEnd = function (frames) {
return reactFrameStack.pop();
};
}
};
var unregisterReactStack = function unregisterReactStack() {
if (typeof console !== 'undefined') {
// $FlowFixMe
console.reactStack = undefined;
// $FlowFixMe
console.reactStackEnd = undefined;
}
};
var permanentRegister = function proxyConsole(type, callback) {
if (typeof console !== 'undefined') {
var orig = console[type];
if (typeof orig === 'function') {
console[type] = function __stack_frame_overlay_proxy_console__() {
try {
var _message = arguments[0];
if (typeof _message === 'string' && reactFrameStack.length > 0) {
callback(_message, reactFrameStack[reactFrameStack.length - 1]);
}
} catch (err) {
// Warnings must never crash. Rethrow with a clean stack.
setTimeout(function () {
throw err;
});
}
return orig.apply(this, arguments);
};
}
}
};
export { permanentRegister, registerReactStack, unregisterReactStack };