| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var call = require('../internals/function-call'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var requireObjectCoercible = require('../internals/require-object-coercible'); | 
| var isCallable = require('../internals/is-callable'); | 
| var isNullOrUndefined = require('../internals/is-null-or-undefined'); | 
| var isRegExp = require('../internals/is-regexp'); | 
| var toString = require('../internals/to-string'); | 
| var getMethod = require('../internals/get-method'); | 
| var getRegExpFlags = require('../internals/regexp-get-flags'); | 
| var getSubstitution = require('../internals/get-substitution'); | 
| var wellKnownSymbol = require('../internals/well-known-symbol'); | 
| var IS_PURE = require('../internals/is-pure'); | 
|   | 
| var REPLACE = wellKnownSymbol('replace'); | 
| var $TypeError = TypeError; | 
| var indexOf = uncurryThis(''.indexOf); | 
| var replace = uncurryThis(''.replace); | 
| var stringSlice = uncurryThis(''.slice); | 
| var max = Math.max; | 
|   | 
| // `String.prototype.replaceAll` method | 
| // https://tc39.es/ecma262/#sec-string.prototype.replaceall | 
| $({ target: 'String', proto: true }, { | 
|   replaceAll: function replaceAll(searchValue, replaceValue) { | 
|     var O = requireObjectCoercible(this); | 
|     var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, position, replacement; | 
|     var endOfLastMatch = 0; | 
|     var result = ''; | 
|     if (!isNullOrUndefined(searchValue)) { | 
|       IS_REG_EXP = isRegExp(searchValue); | 
|       if (IS_REG_EXP) { | 
|         flags = toString(requireObjectCoercible(getRegExpFlags(searchValue))); | 
|         if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes'); | 
|       } | 
|       replacer = getMethod(searchValue, REPLACE); | 
|       if (replacer) return call(replacer, searchValue, O, replaceValue); | 
|       if (IS_PURE && IS_REG_EXP) return replace(toString(O), searchValue, replaceValue); | 
|     } | 
|     string = toString(O); | 
|     searchString = toString(searchValue); | 
|     functionalReplace = isCallable(replaceValue); | 
|     if (!functionalReplace) replaceValue = toString(replaceValue); | 
|     searchLength = searchString.length; | 
|     advanceBy = max(1, searchLength); | 
|     position = indexOf(string, searchString); | 
|     while (position !== -1) { | 
|       replacement = functionalReplace | 
|         ? toString(replaceValue(searchString, position, string)) | 
|         : getSubstitution(searchString, string, position, [], undefined, replaceValue); | 
|       result += stringSlice(string, endOfLastMatch, position) + replacement; | 
|       endOfLastMatch = position + searchLength; | 
|       position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy); | 
|     } | 
|     if (endOfLastMatch < string.length) { | 
|       result += stringSlice(string, endOfLastMatch); | 
|     } | 
|     return result; | 
|   } | 
| }); |