@nanggo/social-preview
Version:
Generate beautiful social media preview images from any URL
113 lines (112 loc) • 3.62 kB
JavaScript
;
/**
* 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;