const render = props.render; let defaultDebug = 'debug' in props ? JSON.parse(props.debug) : false; if (typeof defaultDebug !== 'boolean') defaultDebug = false; function Logger(scope, args, debug) { scope = typeof scope === 'string' ? { name: scope, stack: [] } : scope; if (typeof debug !== 'boolean') { const parsed = JSON.parse(debug); if (typeof parsed === 'boolean') debug = parsed; debug = defaultDebug; } let tag = `[${scope.name}]${ scope.stack.length ? ` {${scope.stack.join(' > ')}}` : '' }`; let log = (str, args) => debug && console.log(tag, str, args); let error = (str, args) => console.log(tag, str, args); let span = (name, args) => Logger({ name: scope.name, stack: [...scope.stack, name] }, args, debug); if (args && Object.entries(args).length && debug) console.log(tag + ' args', args); let self = { log, error, span }; self.fallback = () => (logger) => logger && typeof logger.span === 'function' ? logger : self; return self; } return render({ Logger });