/** @module logging.ts */ import { K, S } from './combinators' import { untypedCurry } from './function/untypedCurry' import { pluckObj } from './object' /* tslint:disable no-console */ // derived helpers /** * Todo */ export const tap = S( K ) // tslint:disable-next-line:no-console /** * Todo */ // export const trace = ( a: A ): A => ( console.log( a ), a ) export function trace( p: A ): A export function trace( ...p: [ unknown, A] ): A export function trace( ...p: [ unknown, unknown, A] ): A export function trace( ...p: [ unknown, unknown, unknown, A] ): A export function trace( ...p: [ unknown, unknown, unknown, unknown, A] ): A export function trace( ...p: Array ) { console.log( ...p ) return p[ p.length as number ] } export const note = ( ...messages: Array ) => ( console.log( ...messages ), trace ) const messageSymbol = Symbol interface Message { value: any; id: typeof messageSymbol} /** * Todo */ export const label = // tslint:disable-next-line:no-shadowed-variable function label( value ): Message { return { value, id: messageSymbol } } const _last = ( arr ) => arr[ arr.length - 1 ] // export declare function log(a?: { value: any; id: typeof messageSymbol},b) : any // export function log(a: A , b: B ) : B /** * Todo */ export function log( a: A | Message, ...args: B[] ): A extends Message ? ( b: C ) => C : B extends never ? A : Array /** * Todo */ export function log( a, ...args ) { const {id, value} = a as any return args.length ? ( console.log( a, ...args ), [].concat( a ).concat( args as any ) ) : id === messageSymbol ? ( _a ) => ( console.log( value, _a ), _a ) : ( console.log( a ), a ) as any } // export declare function log(b: B,c?:C) : B // export declare function log(a:A) : A // export declare function log(a:A,b:B) : B /** * Todo */ export const traceMultiLabels = ( ...args ) => ( a: A ): A => ( console.log( ...args, a ), a ) export const _traceWithLabel = untypedCurry( ( _label, a ) => ( console.log( _label, a ), a ) ) export function traceWithLabel( label: {} ): ( a: A ) => A /** * Todo */ export function traceWithLabel( label: {} , a: A ): A /** * Todo */ export function traceWithLabel( ...args ) { return _traceWithLabel( ...args ) } export const traceDebugger = ( ...args ) => args /** * Todo */ // export const map = fn => list => list.map( fn ) /** * Todo */ export const debug = ( name: string, ...pluckTheseOffData: string[] ) => ( data: {} ) => { console.log( name, pluckTheseOffData.length ? pluckObj( ...pluckTheseOffData )( data ) : data ) return data }