'use strict' const validator = require('./lib/validator') const parse = require('./lib/parse') const redactor = require('./lib/redactor') const restorer = require('./lib/restorer') const { groupRedact, nestedRedact } = require('./lib/modifiers') const state = require('./lib/state') const rx = require('./lib/rx') const validate = validator() const noop = (o) => o noop.restore = noop const DEFAULT_CENSOR = '[REDACTED]' fastRedact.rx = rx fastRedact.validator = validator module.exports = fastRedact function fastRedact (opts = {}) { const paths = Array.from(new Set(opts.paths || [])) const serialize = 'serialize' in opts ? ( opts.serialize === false ? opts.serialize : (typeof opts.serialize === 'function' ? opts.serialize : JSON.stringify) ) : JSON.stringify const remove = opts.remove if (remove === true && serialize !== JSON.stringify) { throw Error('fast-redact – remove option may only be set when serializer is JSON.stringify') } const censor = remove === true ? undefined : 'censor' in opts ? opts.censor : DEFAULT_CENSOR const isCensorFct = typeof censor === 'function' const censorFctTakesPath = isCensorFct && censor.length > 1 if (paths.length === 0) return serialize || noop validate({ paths, serialize, censor }) const { wildcards, wcLen, secret } = parse({ paths, censor }) const compileRestore = restorer({ secret, wcLen }) const strict = 'strict' in opts ? opts.strict : true return redactor({ secret, wcLen, serialize, strict, isCensorFct, censorFctTakesPath }, state({ secret, censor, compileRestore, serialize, groupRedact, nestedRedact, wildcards, wcLen })) }