From 288ad93dbfed9f6828de20de67105ee6d6504425 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 17 Feb 2017 23:41:35 -0800 Subject: [PATCH] [Refactor] when try/catch is needed, bail early if the value lacks an own `lastIndex` data property. --- .eslintrc | 6 +++++- index.js | 9 +++++++++ package.json | 4 +++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.eslintrc b/.eslintrc index 29ddad8..fbb8e9d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,9 @@ { "root": true, - "extends": "@ljharb" + "extends": "@ljharb", + + "rules": { + "id-length": [1] + } } diff --git a/index.js b/index.js index 396f45c..0c192c5 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,9 @@ 'use strict'; +var has = require('has'); var regexExec = RegExp.prototype.exec; +var gOPD = Object.getOwnPropertyDescriptor; + var tryRegexExecCall = function tryRegexExec(value) { try { regexExec.call(value); @@ -21,5 +24,11 @@ module.exports = function isRegex(value) { return toStr.call(value) === regexClass; } + var descriptor = gOPD(value, 'lastIndex'); + var hasLastIndexDataProperty = descriptor && has(descriptor, 'value'); + if (!hasLastIndexDataProperty) { + return false; + } + return tryRegexExecCall(value); }; diff --git a/package.json b/package.json index d129e3b..e40d247 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,9 @@ "regular", "expression" ], - "dependencies": {}, + "dependencies": { + "has": "^1.0.1" + }, "devDependencies": { "tape": "^4.6.3", "covert": "^1.1.0",