diff options
author | Minteck <contact@minteck.org> | 2021-12-21 16:52:28 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2021-12-21 16:52:28 +0100 |
commit | 46e43f4bde4a35785b4997b81e86cd19f046b69b (patch) | |
tree | c53c2f826f777f9d6b2d249dab556feb72a6c3a6 /src/node_modules/is-regex/index.js | |
download | langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.gz langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.bz2 langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.zip |
Commit
Diffstat (limited to 'src/node_modules/is-regex/index.js')
-rw-r--r-- | src/node_modules/is-regex/index.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/node_modules/is-regex/index.js b/src/node_modules/is-regex/index.js new file mode 100644 index 0000000..3db4b92 --- /dev/null +++ b/src/node_modules/is-regex/index.js @@ -0,0 +1,58 @@ +'use strict'; + +var hasSymbols = require('has-symbols')(); +var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol'; +var hasOwnProperty; +var regexExec; +var isRegexMarker; +var badStringifier; + +if (hasToStringTag) { + hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); + regexExec = Function.call.bind(RegExp.prototype.exec); + isRegexMarker = {}; + + var throwRegexMarker = function () { + throw isRegexMarker; + }; + badStringifier = { + toString: throwRegexMarker, + valueOf: throwRegexMarker + }; + + if (typeof Symbol.toPrimitive === 'symbol') { + badStringifier[Symbol.toPrimitive] = throwRegexMarker; + } +} + +var toStr = Object.prototype.toString; +var gOPD = Object.getOwnPropertyDescriptor; +var regexClass = '[object RegExp]'; + +module.exports = hasToStringTag + // eslint-disable-next-line consistent-return + ? function isRegex(value) { + if (!value || typeof value !== 'object') { + return false; + } + + var descriptor = gOPD(value, 'lastIndex'); + var hasLastIndexDataProperty = descriptor && hasOwnProperty(descriptor, 'value'); + if (!hasLastIndexDataProperty) { + return false; + } + + try { + regexExec(value, badStringifier); + } catch (e) { + return e === isRegexMarker; + } + } + : function isRegex(value) { + // In older browsers, typeof regex incorrectly returns 'function' + if (!value || (typeof value !== 'object' && typeof value !== 'function')) { + return false; + } + + return toStr.call(value) === regexClass; + }; |