UNPKG

@nanggo/social-preview

Version:

Generate beautiful social media preview images from any URL

113 lines (112 loc) 3.62 kB
"use strict"; /** * Simple logging utility for the social preview generator */ /* eslint-disable no-console */ Object.defineProperty(exports, "__esModule", { value: true }); exports.logTemplateError = exports.logMetadataExtractionError = exports.logImageFetchError = exports.logger = exports.Logger = exports.LogLevel = void 0; /** * Log levels */ var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; })(LogLevel || (exports.LogLevel = LogLevel = {})); /** * Simple logger implementation */ class Logger { static instance; logLevel = LogLevel.WARN; constructor() { } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setLevel(level) { this.logLevel = level; } shouldLog(level) { const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]; const currentLevelIndex = levels.indexOf(this.logLevel); const messageLevelIndex = levels.indexOf(level); return messageLevelIndex >= currentLevelIndex; } formatMessage(level, message, context) { const timestamp = new Date().toISOString(); const prefix = `[${timestamp}] [${level.toUpperCase()}] [social-preview-generator]`; if (!context) { return `${prefix} ${message}`; } const contextParts = []; if (context.operation) contextParts.push(`operation=${context.operation}`); if (context.url) contextParts.push(`url=${context.url}`); const contextStr = contextParts.length > 0 ? ` {${contextParts.join(', ')}}` : ''; return `${prefix} ${message}${contextStr}`; } debug(message, context) { if (this.shouldLog(LogLevel.DEBUG)) { console.debug(this.formatMessage(LogLevel.DEBUG, message, context)); } } info(message, context) { if (this.shouldLog(LogLevel.INFO)) { console.info(this.formatMessage(LogLevel.INFO, message, context)); } } warn(message, context) { if (this.shouldLog(LogLevel.WARN)) { console.warn(this.formatMessage(LogLevel.WARN, message, context)); if (context?.error) { console.warn('Error details:', context.error); } } } error(message, context) { if (this.shouldLog(LogLevel.ERROR)) { console.error(this.formatMessage(LogLevel.ERROR, message, context)); if (context?.error) { console.error('Error details:', context.error); } } } } exports.Logger = Logger; /** * Default logger instance */ exports.logger = Logger.getInstance(); /** * Convenience functions for common logging patterns */ const logImageFetchError = (url, error) => { exports.logger.warn(`Failed to fetch image`, { operation: 'image-fetch', url, error, }); }; exports.logImageFetchError = logImageFetchError; const logMetadataExtractionError = (url, error) => { exports.logger.warn(`Failed to extract metadata`, { operation: 'metadata-extraction', url, error, }); }; exports.logMetadataExtractionError = logMetadataExtractionError; const logTemplateError = (templateName, error) => { exports.logger.error(`Template generation failed`, { operation: 'template-generation', error, metadata: { templateName }, }); }; exports.logTemplateError = logTemplateError;