From cd2397756f264d7c8f91d19f20dc81dffa4a8ec7 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 4 Jul 2024 11:36:37 +1200 Subject: [PATCH] improve output on browsers --- .changeset/tame-zoos-vanish.md | 5 ++ packages/effect/src/Console.ts | 5 +- packages/effect/src/internal/fiberRuntime.ts | 16 +------ packages/effect/src/internal/logger.ts | 48 +++++++++++++++----- 4 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 .changeset/tame-zoos-vanish.md diff --git a/.changeset/tame-zoos-vanish.md b/.changeset/tame-zoos-vanish.md new file mode 100644 index 00000000000..03f076062ed --- /dev/null +++ b/.changeset/tame-zoos-vanish.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +fix types of UnsafeConsole.group diff --git a/packages/effect/src/Console.ts b/packages/effect/src/Console.ts index a0fa27a7aa3..b6df353fec0 100644 --- a/packages/effect/src/Console.ts +++ b/packages/effect/src/Console.ts @@ -63,10 +63,7 @@ export interface UnsafeConsole { dir(item: any, options?: any): void dirxml(...args: ReadonlyArray): void error(...args: ReadonlyArray): void - group(options?: { - readonly label?: string | undefined - readonly collapsed?: boolean | undefined - }): void + group(label?: string | undefined): void groupEnd(): void info(...args: ReadonlyArray): void log(...args: ReadonlyArray): void diff --git a/packages/effect/src/internal/fiberRuntime.ts b/packages/effect/src/internal/fiberRuntime.ts index 1e822186ff0..ace835a650b 100644 --- a/packages/effect/src/internal/fiberRuntime.ts +++ b/packages/effect/src/internal/fiberRuntime.ts @@ -1424,21 +1424,7 @@ export const logFmtLogger: Logger = globalValue( /** @internal */ export const prettyLogger: Logger = globalValue( Symbol.for("effect/Logger/prettyLogger"), - () => { - const logger = internalLogger.prettyLogger() - return internalLogger.makeLogger((opts) => { - const services = FiberRefs.getOrDefault(opts.context, defaultServices.currentServices) - const console = Context.get(services, consoleTag).unsafe - const groups = logger.log(opts) - console.log(...groups[0]) - if (groups.length <= 1) return - for (let i = 1; i < groups.length; i++) { - console.group() - console.log(...groups[i]) - console.groupEnd() - } - }) - } + () => internalLogger.prettyLogger() ) /** @internal */ diff --git a/packages/effect/src/internal/logger.ts b/packages/effect/src/internal/logger.ts index 7a675804bf1..af4123600ec 100644 --- a/packages/effect/src/internal/logger.ts +++ b/packages/effect/src/internal/logger.ts @@ -1,4 +1,6 @@ import * as Arr from "../Array.js" +import * as Context from "../Context.js" +import * as FiberRefs from "../FiberRefs.js" import type { LazyArg } from "../Function.js" import { constVoid, dual, pipe } from "../Function.js" import * as HashMap from "../HashMap.js" @@ -10,6 +12,8 @@ import * as LogSpan from "../LogSpan.js" import * as Option from "../Option.js" import { pipeArguments } from "../Pipeable.js" import * as Cause from "./cause.js" +import * as defaultServices from "./defaultServices.js" +import { consoleTag } from "./defaultServices/console.js" import * as _fiberId from "./fiberId.js" /** @internal */ @@ -377,7 +381,7 @@ const withColor = (text: string, ...colors: ReadonlyArray) => { } const withColorNoop = (text: string, ..._colors: ReadonlyArray) => text const colors = { - bright: "1", + bold: "1", red: "31", green: "32", @@ -406,16 +410,18 @@ const logLevelColors: Record> = /** @internal */ export const prettyLogger = (options?: { - readonly colors?: "auto" | boolean + readonly colors?: "auto" | boolean | undefined + readonly stderr?: boolean | undefined }) => - makeLogger>>( - ({ annotations, cause, date, fiberId, logLevel, message: message_, spans }) => { + makeLogger( + ({ annotations, cause, context, date, fiberId, logLevel, message: message_, spans }) => { + const services = FiberRefs.getOrDefault(context, defaultServices.currentServices) + const console = Context.get(services, consoleTag).unsafe + const log = options?.stderr === true ? console.error : console.log const showColors = typeof options?.colors === "boolean" ? options.colors : processStdoutIsTTY || hasWindow const color = showColors ? withColor : withColorNoop const message = Arr.ensure(message_) - const groups: Array> = [] - const firstParams: Array = [] let firstLine = color( `[${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${ @@ -438,31 +444,49 @@ export const prettyLogger = (options?: { if (message.length > 0) { const firstMaybeString = structuredMessage(message[0]) if (typeof firstMaybeString === "string") { - firstLine += " " + color(firstMaybeString, colors.bright, colors.cyan) + firstLine += " " + color(firstMaybeString, colors.bold, colors.cyan) messageIndex++ } } - groups.push([firstLine, ...firstParams]) + + if (hasWindow) { + console.group(firstLine) + } else { + log(firstLine) + console.group() + } + let currentMessage = "" + const params: Array = [] if (!Cause.isEmpty(cause)) { const errors = Cause.prettyErrors(cause) for (let i = 0; i < errors.length; i++) { - groups.push(hasWindow ? [errors[i]] : [errors[i].stack]) + if (hasWindow) { + console.error(errors[i].stack) + } else { + currentMessage += "\n%s" + params.push(errors[i].stack) + } } } if (messageIndex < message.length) { for (; messageIndex < message.length; messageIndex++) { - groups.push([message[messageIndex]]) + currentMessage += "\n%O" + params.push(message[messageIndex]) } } if (HashMap.size(annotations) > 0) { for (const [key, value] of annotations) { - groups.push([color(`${key}:`, colors.bright, colors.white) + " %O", value]) + currentMessage += "\n" + color(`${key}:`, colors.bold, colors.white) + " %O" + params.push(value) } } - return groups + if (currentMessage.length > 0) { + log(currentMessage.slice(1), ...params) + } + console.groupEnd() } )