You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  |  | 'use strict' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | const { createContext, runInContext } = require('vm') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | module.exports = validator | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | function validator (opts = {}) { | 
					
						
							|  |  |  |  |   const { | 
					
						
							|  |  |  |  |     ERR_PATHS_MUST_BE_STRINGS = () => 'fast-redact - Paths must be (non-empty) strings', | 
					
						
							|  |  |  |  |     ERR_INVALID_PATH = (s) => `fast-redact – Invalid path (${s})` | 
					
						
							|  |  |  |  |   } = opts | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   return function validate ({ paths }) { | 
					
						
							|  |  |  |  |     paths.forEach((s) => { | 
					
						
							|  |  |  |  |       if (typeof s !== 'string') { | 
					
						
							|  |  |  |  |         throw Error(ERR_PATHS_MUST_BE_STRINGS()) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       try { | 
					
						
							|  |  |  |  |         if (/〇/.test(s)) throw Error() | 
					
						
							|  |  |  |  |         const proxy = new Proxy({}, { get: () => proxy, set: () => { throw Error() } }) | 
					
						
							|  |  |  |  |         const expr = (s[0] === '[' ? '' : '.') + s.replace(/^\*/, '〇').replace(/\.\*/g, '.〇').replace(/\[\*\]/g, '[〇]') | 
					
						
							|  |  |  |  |         if (/\n|\r|;/.test(expr)) throw Error() | 
					
						
							|  |  |  |  |         if (/\/\*/.test(expr)) throw Error() | 
					
						
							|  |  |  |  |         runInContext(`
 | 
					
						
							|  |  |  |  |           (function () { | 
					
						
							|  |  |  |  |             'use strict' | 
					
						
							|  |  |  |  |             o${expr} | 
					
						
							|  |  |  |  |             if ([o${expr}].length !== 1) throw Error() | 
					
						
							|  |  |  |  |           })() | 
					
						
							|  |  |  |  |         `, createContext({ o: proxy, 〇: null }), {
 | 
					
						
							|  |  |  |  |           codeGeneration: { strings: false, wasm: false } | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } catch (e) { | 
					
						
							|  |  |  |  |         throw Error(ERR_INVALID_PATH(s)) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | } |