|  |  |  |  | '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 | 
					
						
							|  |  |  |  |   })) | 
					
						
							|  |  |  |  | } |