UNPKG

synaptra

Version:

A high-performance Model Context Protocol server for GraphQL APIs with advanced features, type-safety, and developer experience improvements

72 lines 2.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports.getLogger = exports.createLogger = void 0; const winston_1 = __importDefault(require("winston")); const chalk_1 = __importDefault(require("chalk")); class Logger { winston; config; constructor(config) { this.config = config; this.winston = winston_1.default.createLogger({ level: config.level, format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()), transports: [ new winston_1.default.transports.Console({ format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple(), winston_1.default.format.printf((info) => { const ts = new Date(info.timestamp).toISOString(); const { timestamp: _timestamp, level, message, ...meta } = info; const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : ''; return `${chalk_1.default.gray(ts)} ${level}: ${message}${metaStr}`; })), }), ], }); } error(message, meta) { this.winston.error(message, meta); } warn(message, meta) { this.winston.warn(message, meta); } info(message, meta) { this.winston.info(message, meta); } debug(message, meta) { this.winston.debug(message, meta); } query(query, variables) { if (this.config.enableQueries) { this.debug(`GraphQL Query: ${query}`, { variables }); } } performance(operation, duration, meta) { if (this.config.enablePerformance) { const formattedDuration = duration < 1000 ? `${duration}ms` : `${(duration / 1000).toFixed(2)}s`; this.info(`Performance: ${operation} took ${formattedDuration}`, meta); } } updateConfig(config) { this.config = { ...this.config, ...config }; this.winston.level = this.config.level; } } exports.Logger = Logger; // Singleton logger instance let logger; const createLogger = (config) => { logger = new Logger(config); return logger; }; exports.createLogger = createLogger; const getLogger = () => { if (!logger) { throw new Error('Logger not initialized. Call createLogger first.'); } return logger; }; exports.getLogger = getLogger; //# sourceMappingURL=logger.js.map