UNPKG

nigerian-mobile-validator

Version:

The most rigorous, up-to-date library for validating Nigerian mobile numbers. Fully NCC-compliant, and security-focused, with enterprise-grade features to prevent the business risks of validation failures in regulated industries.

163 lines (162 loc) 5.23 kB
// src/logging/logger.ts import { ValidatorSecurity } from '../security/validator-security'; /** * Factory for creating loggers */ export class LoggerFactory { /** * Create a logger instance * * @param options Logger options * @returns Logger instance */ static createLogger(options) { if (!options) { return ValidatorSecurity.createSecureLogger(new LoggerFactory.ConsoleLogger()); } if (options.instance) { if (options.type === 'winston') { return ValidatorSecurity.createSecureLogger(new LoggerFactory.WinstonAdapter(options.instance)); } else if (options.type === 'pino') { return ValidatorSecurity.createSecureLogger(new LoggerFactory.PinoAdapter(options.instance)); } else { throw new Error(`Unsupported logger type: ${options.type}`); } } switch (options.type) { case 'console': return ValidatorSecurity.createSecureLogger(new LoggerFactory.ConsoleLogger(options.prefix)); case 'silent': return ValidatorSecurity.createSecureLogger(new LoggerFactory.SilentLogger()); default: return ValidatorSecurity.createSecureLogger(new LoggerFactory.ConsoleLogger(options.prefix)); } } } /** * Default logger implementation that logs to console */ LoggerFactory.ConsoleLogger = class { constructor(prefix = 'NigerianMobileValidator') { this.prefix = prefix; } debug(message, ...meta) { console.debug(`[${this.prefix}] DEBUG: ${message}`, ...meta); } info(message, ...meta) { console.info(`[${this.prefix}] INFO: ${message}`, ...meta); } warn(message, ...meta) { console.warn(`[${this.prefix}] WARN: ${message}`, ...meta); } error(message, ...meta) { console.error(`[${this.prefix}] ERROR: ${message}`, ...meta); } }; /** * Silent logger that doesn't log anything */ LoggerFactory.SilentLogger = class { debug(_message, ..._meta) { } info(_message, ..._meta) { } warn(_message, ..._meta) { } error(_message, ..._meta) { } }; /** * Winston adapter for the Nigerian Mobile Validator * * This class adapts a Winston logger to the ILogger interface. * * Example usage: * ``` * import winston from 'winston'; * import { WinstonAdapter } from 'nigerian-mobile-validator'; * * const winstonLogger = winston.createLogger({ * level: 'info', * format: winston.format.json(), * transports: [new winston.transports.Console()] * }); * * const validator = new NigerianMobileNumberValidator({ * logger: new WinstonAdapter(winstonLogger) * }); * ``` */ LoggerFactory.WinstonAdapter = class { constructor(logger) { this.logger = logger; if (!((logger === null || logger === void 0 ? void 0 : logger.debug) && (logger === null || logger === void 0 ? void 0 : logger.info) && (logger === null || logger === void 0 ? void 0 : logger.warn) && (logger === null || logger === void 0 ? void 0 : logger.error))) { throw new Error('Invalid Winston logger provided'); } } debug(message, ...meta) { this.logger.debug(message, ...meta); } info(message, ...meta) { this.logger.info(message, ...meta); } warn(message, ...meta) { this.logger.warn(message, ...meta); } error(message, ...meta) { this.logger.error(message, ...meta); } }; /** * Pino adapter for the Nigerian Mobile Validator * * This class adapts a Pino logger to the ILogger interface. * * Example usage: * ``` * import pino from 'pino'; * import { PinoAdapter } from 'nigerian-mobile-validator'; * * const pinoLogger = pino(); * * const validator = new NigerianMobileNumberValidator({ * logger: new PinoAdapter(pinoLogger) * }); * ``` */ LoggerFactory.PinoAdapter = class { constructor(logger) { this.logger = logger; if (!((logger === null || logger === void 0 ? void 0 : logger.debug) && (logger === null || logger === void 0 ? void 0 : logger.info) && (logger === null || logger === void 0 ? void 0 : logger.warn) && (logger === null || logger === void 0 ? void 0 : logger.error))) { throw new Error('Invalid Pino logger provided'); } } debug(message, ...meta) { this.logger.debug(meta.length ? { meta } : {}, message); } info(message, ...meta) { this.logger.info(meta.length ? { meta } : {}, message); } warn(message, ...meta) { this.logger.warn(meta.length ? { meta } : {}, message); } error(message, ...meta) { this.logger.error(meta.length ? { meta } : {}, message); } }; // Default singleton logger let defaultLogger = LoggerFactory.createLogger({ type: 'silent' }); /** * Set the default logger for the library. * * @param logger Logger instance */ export function setDefaultLogger(logger) { defaultLogger = logger; } /** * Get the default logger for the library. Unless explicitly set, this is the silent logger. * * @returns Default logger instance */ export function getDefaultLogger() { return defaultLogger; }