Projektstart
This commit is contained in:
52
backend/node_modules/safe-regex2/index.js
generated
vendored
Normal file
52
backend/node_modules/safe-regex2/index.js
generated
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
'use strict'
|
||||
|
||||
const parse = require('ret')
|
||||
const types = parse.types
|
||||
|
||||
function safeRegex (re, opts) {
|
||||
if (!opts) opts = {}
|
||||
const replimit = opts.limit === undefined ? 25 : opts.limit
|
||||
|
||||
if (isRegExp(re)) re = re.source
|
||||
else if (typeof re !== 'string') re = String(re)
|
||||
|
||||
try { re = parse(re) } catch (err) { return false }
|
||||
|
||||
let reps = 0
|
||||
return (function walk (node, starHeight) {
|
||||
let i
|
||||
let ok
|
||||
let len
|
||||
|
||||
if (node.type === types.REPETITION) {
|
||||
starHeight++
|
||||
reps++
|
||||
if (starHeight > 1) return false
|
||||
if (reps > replimit) return false
|
||||
}
|
||||
|
||||
if (node.options) {
|
||||
for (i = 0, len = node.options.length; i < len; i++) {
|
||||
ok = walk({ stack: node.options[i] }, starHeight)
|
||||
if (!ok) return false
|
||||
}
|
||||
}
|
||||
const stack = node.stack || (node.value && node.value.stack)
|
||||
if (!stack) return true
|
||||
|
||||
for (i = 0; i < stack.length; i++) {
|
||||
ok = walk(stack[i], starHeight)
|
||||
if (!ok) return false
|
||||
}
|
||||
|
||||
return true
|
||||
})(re, 0)
|
||||
}
|
||||
|
||||
function isRegExp (x) {
|
||||
return {}.toString.call(x) === '[object RegExp]'
|
||||
}
|
||||
|
||||
module.exports = safeRegex
|
||||
module.exports.default = safeRegex
|
||||
module.exports.safeRegex = safeRegex
|
||||
Reference in New Issue
Block a user