UNPKG

@artinet/sdk

Version:

A TypeScript SDK for building collaborative AI agents.

111 lines (110 loc) 2.76 kB
/** * Copyright 2025 The Artinet Project * SPDX-License-Identifier: Apache-2.0 * * @fileoverview Pino logger adapter for Artinet SDK. * * Lightweight wrapper that adapts a user-configured Pino instance * to the SDK's ILogger interface. * * @module @artinet/sdk/pino * * @example * ```typescript * import pino from 'pino'; * import { configure } from '@artinet/sdk'; * import { configurePino } from '@artinet/sdk/pino'; * * // User configures their own pino instance * const pinoLogger = pino({ * level: 'debug', * transport: { target: 'pino-pretty' } * }); * * // Wrap and configure SDK * configure({ logger: configurePino(pinoLogger) }); * ``` */ /** * Level mapping from Pino to Artinet. */ const LEVEL_MAP = { trace: "trace", debug: "debug", info: "info", warn: "warn", error: "error", fatal: "error", silent: "silent", }; /** * Reverse level mapping from Artinet to Pino. */ const ARTINET_TO_PINO = { trace: "trace", verbose: "debug", debug: "debug", info: "info", warn: "warn", error: "error", silent: "silent", }; function mergeArgs(args) { if (args.length === 0) return undefined; if (args.length === 1 && typeof args[0] === "object" && args[0] !== null) { return args[0]; } return args.reduce((acc, arg, idx) => { if (typeof arg === "object" && arg !== null) { return { ...acc, [idx]: arg }; } acc[`${idx}`] = arg; return acc; }, {}); } /** * Wrap a Pino logger instance to implement ILogger. * * @param pinoLogger - User-configured Pino logger instance * @returns ILogger implementation * * @example * ```typescript * import pino from 'pino'; * import { configure } from '@artinet/sdk'; * import { configurePino } from '@artinet/sdk/pino'; * * const myPino = pino({ level: 'debug' }); * configure({ logger: configurePino(myPino) }); * ``` */ export function configurePino(pinoLogger) { return { get level() { return LEVEL_MAP[pinoLogger.level] ?? "info"; }, debug(msg, ...args) { pinoLogger.debug(mergeArgs(args), msg); }, info(msg, ...args) { pinoLogger.info(mergeArgs(args), msg); }, warn(msg, ...args) { pinoLogger.warn(mergeArgs(args), msg); }, error(msg, err) { pinoLogger.error(err, msg); }, setLevel(level) { pinoLogger.level = ARTINET_TO_PINO[level] ?? "info"; }, getLevel() { return LEVEL_MAP[pinoLogger.level] ?? "info"; }, child(context) { return configurePino(pinoLogger.child(context)); }, }; } export default configurePino;