import stringify from 'safe-stable-stringify' import type { Applog, DatalogQueryPattern } from '../applog/datom-types.ts' import type { Thread } from '../thread/basic.ts' export const createDebugName = ({ caller, thread, pattern, args }: { caller?: string thread?: Thread | Applog[] pattern?: DatalogQueryPattern | DatalogQueryPattern[] | string args?: any }) => { args = args || pattern const str = `${(!Array.isArray(thread) && thread?.name) ? thread.name + ' | ' : ''}` + `${caller ?? 'caller?'}` + `${args ? `{${typeof args === 'string' ? args : stringify(args)}}` : ''}` return str } export const createDebugNameObj = (args: Parameters[0]) => { return { name: createDebugName(args) } as const } export function prettifyThreadName(input: string): string { let depth = 0 let result = '' let insideCurlyBraces = 0 for (let i = 0; i < input.length; i++) { const char = input[i] if (char === '(') { result += char + '\n' + '\t'.repeat(++depth) } else if (char === ')') { result += '\n' + '\t'.repeat(--depth) + char } else if (char === ',' && insideCurlyBraces === 0) { result += char + '\n' + '\t'.repeat(depth) } else if (char === '{' && insideCurlyBraces === 0) { insideCurlyBraces++ result += char + '\n' + '\t'.repeat(depth + 1) } else if (char === '}' && insideCurlyBraces === 1) { insideCurlyBraces-- result += '\n' + '\t'.repeat(depth) + char } else if (char === '{' && insideCurlyBraces > 0) { insideCurlyBraces++ result += char } else if (char === '}' && insideCurlyBraces > 1) { insideCurlyBraces-- result += char } else { result += char } } return result }