import * as React from 'react'; export function withDebugger(InnerComponent) { return (props) => { debugger; // eslint-disable-line no-debugger return ; }; } export function inspectProps(fn = console.log.bind(null, 'inspecting: ')) { return (InnerComponent) => (props) => { fn(props); return ; }; } export const logProps = (label: string) => (WrappedComponent) => { return (props) => { console.log('DEBUG: ', label, props); return ; }; }; export function measureTime(label: string, fn: (...args: any[]) => void) { return (...args: any[]) => { console.time(label); let returnValue = fn(...args); console.timeEnd(label); return returnValue; }; } export function requireProps(...propsToCheck) { return (InnerComponent) => (props) => { const missingProps: string[] = []; propsToCheck.forEach((prop) => { if (props[prop] === undefined) { missingProps.push(prop); } }); const componentName = InnerComponent.displayName || 'unnamed'; assert( missingProps.length === 0, `This component (${componentName}) is missing the required props: ${missingProps.join()}`, true ); return ; }; } export function assert(condition, message, throwError = true) { if (!condition) { console.error(message); if (throwError) { throw message; } } }