Changeset 79a0317 for imaps-frontend/node_modules/is-regex/index.js
- Timestamp:
- 01/21/25 03:08:24 (2 weeks ago)
- Branches:
- main
- Parents:
- 0c6b92a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
imaps-frontend/node_modules/is-regex/index.js
r0c6b92a r79a0317 1 1 'use strict'; 2 2 3 var callBound = require('call-b ind/callBound');3 var callBound = require('call-bound'); 4 4 var hasToStringTag = require('has-tostringtag/shams')(); 5 var has; 6 var $exec; 7 var isRegexMarker; 8 var badStringifier; 5 var hasOwn = require('hasown'); 6 var gOPD = require('gopd'); 7 8 /** @type {import('.')} */ 9 var fn; 9 10 10 11 if (hasToStringTag) { 11 has = callBound('Object.prototype.hasOwnProperty'); 12 $exec = callBound('RegExp.prototype.exec'); 13 isRegexMarker = {}; 12 /** @type {(receiver: ThisParameterType<typeof RegExp.prototype.exec>, ...args: Parameters<typeof RegExp.prototype.exec>) => ReturnType<typeof RegExp.prototype.exec>} */ 13 var $exec = callBound('RegExp.prototype.exec'); 14 /** @type {object} */ 15 var isRegexMarker = {}; 14 16 15 17 var throwRegexMarker = function () { 16 18 throw isRegexMarker; 17 19 }; 18 badStringifier = { 20 /** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */ 21 var badStringifier = { 19 22 toString: throwRegexMarker, 20 23 valueOf: throwRegexMarker … … 24 27 badStringifier[Symbol.toPrimitive] = throwRegexMarker; 25 28 } 26 }27 29 28 var $toString = callBound('Object.prototype.toString'); 29 var gOPD = Object.getOwnPropertyDescriptor; 30 var regexClass = '[object RegExp]'; 31 32 module.exports = hasToStringTag 30 /** @type {import('.')} */ 31 // @ts-expect-error TS can't figure out that the $exec call always throws 33 32 // eslint-disable-next-line consistent-return 34 ?function isRegex(value) {33 fn = function isRegex(value) { 35 34 if (!value || typeof value !== 'object') { 36 35 return false; 37 36 } 38 37 39 var descriptor = gOPD(value, 'lastIndex'); 40 var hasLastIndexDataProperty = descriptor && has(descriptor, 'value'); 38 // eslint-disable-next-line no-extra-parens 39 var descriptor = /** @type {NonNullable<typeof gOPD>} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex'); 40 var hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value'); 41 41 if (!hasLastIndexDataProperty) { 42 42 return false; … … 44 44 45 45 try { 46 $exec(value, badStringifier); 46 // eslint-disable-next-line no-extra-parens 47 $exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier))); 47 48 } catch (e) { 48 49 return e === isRegexMarker; 49 50 } 50 } 51 : function isRegex(value) { 51 }; 52 } else { 53 /** @type {(receiver: ThisParameterType<typeof Object.prototype.toString>, ...args: Parameters<typeof Object.prototype.toString>) => ReturnType<typeof Object.prototype.toString>} */ 54 var $toString = callBound('Object.prototype.toString'); 55 /** @const @type {'[object RegExp]'} */ 56 var regexClass = '[object RegExp]'; 57 58 /** @type {import('.')} */ 59 fn = function isRegex(value) { 52 60 // In older browsers, typeof regex incorrectly returns 'function' 53 61 if (!value || (typeof value !== 'object' && typeof value !== 'function')) { … … 57 65 return $toString(value) === regexClass; 58 66 }; 67 } 68 69 module.exports = fn;
Note:
See TracChangeset
for help on using the changeset viewer.