I was using the module redact-secrets with Winston logger. This module makes sensitive data like passwords unreadable in logfiles. Very cool and handy module. It makes use of another module is-secret that contains a collection of patterns to determine what sensitive data is. One piece of sentive data was missing from is-secret: pass. I could fix it on my side, but I prefer the original GitHub project to be updated so others can also profit from it. So I submitted an issue on GitHub. While waiting for the fix I needed to continue with my development work. So I used another handy module override-require. This module overrides the resolution logic of require. So you can use it to override a dependency of a module. I used it in the following to overrule is-secret used by redact-secrets.
const overrideRequire = require('override-require'); // Check if a request needs to be overridden const isOverride = (request) => { return request === 'is-secret'; }; // If isOverride is true, load the module with the overridden module const resolveRequest = (request) => { return require('./overrule/is-secret'); }; // Initialize overide-require const restoreOriginalModuleLoader = overrideRequire(isOverride, resolveRequest); const { createLogger, format, transports } = require('winston'); // When redacts-secrets is loaded override-require will kickin and load our own module const redact = require('redact-secrets')('******'); const fs = require('fs'); const path = require('path'); // Disable override require restoreOriginalModuleLoader();
That’s it. Pretty cool isn’t it?