Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 1x 1x 1x 1x 4x 29x 1x 1x 101x 1x 100x 126x 4x 122x 122x 582x 121x 121x 121x 121x 117x 116x 29x | 'use strict' const { createContext, runInContext } = require('vm') const rx = require('./rx') module.exports = validator function validator (opts = {}) { const { ERR_CENSOR_MUST_NOT_BE_FUNCTION = () => 'fast-redact – censor may not be a function', ERR_PATHS_MUST_BE_STRINGS = () => 'fast-redact - Paths must be strings', ERR_INVALID_PATH = (s) => `fast-redact – Invalid path (${s})` } = opts return function validate ({paths, serialize, censor}) { if (typeof censor === 'function') { throw Error(ERR_CENSOR_MUST_NOT_BE_FUNCTION()) } 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.replace(/^\*/, '〇').replace(/\.\*/g, '.〇').replace(/\[\*\]/g, '[〇]') rx.lastIndex = 0 Iif (rx.test(expr) === false) throw Error() 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)) } }) } } |