/* eslint-disable no-console */ import * as IO from 'fp-ts/IO' import * as RR from 'fp-ts/ReadonlyRecord' import * as $S from './struct' const _noArgs = (method: 'groupEnd'): IO.IO => () => console[method]() const _singleArg = (method: 'count' | 'countReset' | 'time' | 'timeEnd' | 'timeLog') => (a?: unknown): IO.IO => () => console[method](a as any) const _multipleArgs = ( method: | 'error' | 'group' | 'groupCollapsed' | 'info' | 'log' | 'trace' | 'warn', ) => (...as: ReadonlyArray): IO.IO => () => console[method](...as) export const error = _multipleArgs('error') export const info = _multipleArgs('info') export const log = _multipleArgs('log') export const trace = _multipleArgs('trace') export const warn = _multipleArgs('warn') export const assert = (condition?: boolean, ...as: ReadonlyArray): IO.IO => () => console.assert(condition, ...as) export const count = _singleArg('count') export const countReset = _singleArg('countReset') export const group = _multipleArgs('group') export const groupCollapsed = _multipleArgs('groupCollapsed') export const groupEnd = _noArgs('groupEnd') export function table( data: ReadonlyArray | RR.ReadonlyRecord, columns?: ReadonlyArray, ): IO.IO export function table(data: $S.Struct | ReadonlyArray): IO.IO export function table( a?: undefined | boolean | number | string, ...as: ReadonlyArray ): IO.IO export function table(...args: ReadonlyArray) { return () => console.table(...args) } export const time = _singleArg('time') export const timeEnd = _singleArg('timeEnd') export const timeLog = _singleArg('timeLog')