🌳
pt0/sharedF/betInspectF.mts
1import * as _ from 'lodash-es'
2import { LuxDt } from './timeF/Date1TimeF.mts'
5type BetLogFormatter = (arg: any, key?: string | number) => any
7export const betLogFormatters: BetLogFormatter[] = []
9export const notFormatted = Symbol('notFormatted')
11export const betInspect = (arg: any, key?: string | number): any => {
12 for (const fmt of betLogFormatters) {
13 const result = fmt(arg, key)
14 if (result !== notFormatted) return result
15 }
17 if (_.isString(arg) && (
18 _.startsWith(arg, 'data:') && arg.length > 100
19 )) {
20 return arg.slice(0, 20) + '...'
21 }
23 if (arg == 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855') return 'emptyStrSha256'
25 if (_.isString(arg) && arg.length < 40 && arg.match(/\+\d{2}\:\d{2}$/)) {
26 arg = LuxDt.fromISO(arg)
27 }
28 if (arg?.isLuxonDuration) {
29 return dur2Human(arg)
30 }
31 if (arg?.isLuxonInterval) {
32 return _.map([arg.start, arg.end], betInspect)
33 }
34 if (arg?.isLuxonDateTime) {
35 const {invalidReason} = arg
36 if (invalidReason) {
37 return betInspect({invalidReason})
38 }
39 return 'lxdt' + arg.toISO()
40 }
41 if (_.isDate(arg)) {
42 return 'jsdt' + betInspect(LuxDt.fromJSDate(arg))
43 }
45 if (_.isArray(arg)) {
46 return _.map(arg, betInspect)
47 }
48 if (_.isPlainObject(arg)) return _.mapValues(arg, betInspect)
49 return arg