const DEFAULT_DISABLED_TYPES = ['env', 'migrate', 'migration']; function normalizeType(value) { return String(value || '') .trim() .toLowerCase() .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, ''); } function parseTypeList(value) { return new Set( String(value || '') .split(',') .map(normalizeType) .filter(Boolean) ); } function configuredSets() { const enabled = parseTypeList(process.env.LOG_ENABLED_TYPES); const disabled = parseTypeList(process.env.LOG_DISABLED_TYPES || DEFAULT_DISABLED_TYPES.join(',')); return { enabled, disabled }; } function typeFromMessage(args) { const first = args[0]; if (typeof first !== 'string') return null; const match = first.match(/^\[([^\]]+)\]/); return match ? normalizeType(match[1]) : null; } function isTypeEnabled(type) { if (!type) return true; const { enabled, disabled } = configuredSets(); if (enabled.has('all') || enabled.has(type)) return true; if (disabled.has('all') || disabled.has(type)) return false; return true; } function shouldLog(args) { return isTypeEnabled(typeFromMessage(args)); } function install() { if (console.__wifiBizLoggerInstalled) return; for (const method of ['log', 'warn', 'error', 'info', 'debug']) { const original = console[method]?.bind(console); if (!original) continue; console[method] = (...args) => { if (shouldLog(args)) { original(...args); } }; } Object.defineProperty(console, '__wifiBizLoggerInstalled', { value: true, enumerable: false, }); } module.exports = { install, isTypeEnabled, normalizeType, };