UNPKG

@gongt/ts-stl-client

Version:
59 lines 2.36 kB
"use strict"; 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