@artinet/sdk
Version:
A TypeScript SDK for building collaborative AI agents.
111 lines (110 loc) • 2.76 kB
JavaScript
/**
* 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;