@gongt/ts-stl-client
Version:
59 lines • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const create_logger_1 = require("@gongt/ts-stl-library/debug/create-logger");
const levels_1 = require("@gongt/ts-stl-library/debug/levels");
const monkey_patch_1 = require("@gongt/ts-stl-library/pattern/monkey-patch");
const React = require("react");
function injectRenderInspect() {
const hintRender = create_logger_1.createLogger(levels_1.LOG_LEVEL.SILLY, 'render');
if (hintRender.enabled) {
hintRender.fn = console.group.bind(console);
const m = new monkey_patch_1.MonkeyPatch(React.createElement);
let timeout, times = {};
const defTimes = {};
const cb = () => {
hintRender('render tick: ');
const dbg = Object.keys(times).filter((k) => times[k]).map(k => [k, times[k]]);
console.table(dbg);
Object.assign(times, defTimes);
console.groupEnd();
timeout = null;
};
const handle = (name) => {
times[name]++;
if (!timeout) {
timeout = setTimeout(cb, 0);
}
};
m.argumentsValue((args) => {
const Component = args[0];
if (typeof Component !== 'object' && typeof Component !== 'function') {
handle(Component);
return args;
}
let name = Component.displayname || Component.constructor.displayName || Component.constructor.name || 'unknown';
if (name === 'Function' && Component.name) {
name = Component.name;
}
defTimes[name] = 0;
if (!times.hasOwnProperty(name)) {
times[name] = 0;
}
handle(Component);
if (Component.render) {
if (!Component['___debug']) {
Component['___debug'] = true;
const ov = Component.render.bind(Component);
Component.render = (...args) => {
handle(name);
return ov(...args);
};
}
}
return args;
});
Object.assign(React, { createElement: m.getFunction() });
}
}
exports.injectRenderInspect = injectRenderInspect;
//# sourceMappingURL=inject-render-inspect.js.map