| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var aString = require('../internals/a-string'); | 
| var hasOwn = require('../internals/has-own-property'); | 
| var padStart = require('../internals/string-pad').start; | 
| var WHITESPACES = require('../internals/whitespaces'); | 
|   | 
| var $Array = Array; | 
| var $escape = RegExp.escape; | 
| var charAt = uncurryThis(''.charAt); | 
| var charCodeAt = uncurryThis(''.charCodeAt); | 
| var numberToString = uncurryThis(1.1.toString); | 
| var join = uncurryThis([].join); | 
| var FIRST_DIGIT_OR_ASCII = /^[0-9a-z]/i; | 
| var SYNTAX_SOLIDUS = /^[$()*+./?[\\\]^{|}]/; | 
| var OTHER_PUNCTUATORS_AND_WHITESPACES = RegExp('^[!"#%&\',\\-:;<=>@`~' + WHITESPACES + ']'); | 
| var exec = uncurryThis(FIRST_DIGIT_OR_ASCII.exec); | 
|   | 
| var ControlEscape = { | 
|   '\u0009': 't', | 
|   '\u000A': 'n', | 
|   '\u000B': 'v', | 
|   '\u000C': 'f', | 
|   '\u000D': 'r' | 
| }; | 
|   | 
| var escapeChar = function (chr) { | 
|   var hex = numberToString(charCodeAt(chr, 0), 16); | 
|   return hex.length < 3 ? '\\x' + padStart(hex, 2, '0') : '\\u' + padStart(hex, 4, '0'); | 
| }; | 
|   | 
| // Avoiding the use of polyfills of the previous iteration of this proposal | 
| var FORCED = !$escape || $escape('ab') !== '\\x61b'; | 
|   | 
| // `RegExp.escape` method | 
| // https://tc39.es/ecma262/#sec-regexp.escape | 
| $({ target: 'RegExp', stat: true, forced: FORCED }, { | 
|   escape: function escape(S) { | 
|     aString(S); | 
|     var length = S.length; | 
|     var result = $Array(length); | 
|   | 
|     for (var i = 0; i < length; i++) { | 
|       var chr = charAt(S, i); | 
|       if (i === 0 && exec(FIRST_DIGIT_OR_ASCII, chr)) { | 
|         result[i] = escapeChar(chr); | 
|       } else if (hasOwn(ControlEscape, chr)) { | 
|         result[i] = '\\' + ControlEscape[chr]; | 
|       } else if (exec(SYNTAX_SOLIDUS, chr)) { | 
|         result[i] = '\\' + chr; | 
|       } else if (exec(OTHER_PUNCTUATORS_AND_WHITESPACES, chr)) { | 
|         result[i] = escapeChar(chr); | 
|       } else { | 
|         var charCode = charCodeAt(chr, 0); | 
|         // single UTF-16 code unit | 
|         if ((charCode & 0xF800) !== 0xD800) result[i] = chr; | 
|         // unpaired surrogate | 
|         else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) !== 0xDC00) result[i] = escapeChar(chr); | 
|         // surrogate pair | 
|         else { | 
|           result[i] = chr; | 
|           result[++i] = charAt(S, i); | 
|         } | 
|       } | 
|     } | 
|   | 
|     return join(result, ''); | 
|   } | 
| }); |