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
JavaScript
// 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;
}