string-replace-all-ponyfill
Version:
`String.prototype.replaceAll` ponyfill.
66 lines (50 loc) • 2.08 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var escapeStringRegexp = function (string) {
if (typeof string !== 'string') {
throw new TypeError('Expected a string');
} // Escape characters with special meaning either inside or outside character sets.
// Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.
return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
};
var emptyStringRegex = /(?:)/g;
/**
* @param {string} stringToReplace
* @param {string|RegExp} searchValue
* @param {string|Function} replaceValue
*
* @returns {string}
* @throws {TypeError}
*/
function ponyfill(stringToReplace, searchValue, replaceValue) {
if (typeof stringToReplace !== 'string') {
throw new TypeError('Expected a string');
}
if (searchValue instanceof RegExp) {
var globalFlag = searchValue.global;
if (!globalFlag) {
throw new TypeError('`String.prototype.replaceAll` ponyfill called with a non-global RegExp argument');
}
return stringToReplace.replace(searchValue, replaceValue);
}
if (searchValue === '') {
var value = stringToReplace.replace(emptyStringRegex, replaceValue);
emptyStringRegex.lastIndex = 0;
return value;
}
var stringToFind = typeof searchValue !== 'string' ? String(searchValue) : searchValue;
return stringToReplace.replace(new RegExp(escapeStringRegexp(stringToFind), 'g'), replaceValue);
}
var preferNative = function preferNative(string) {
for (var _len = arguments.length, arguments_ = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
arguments_[_key - 1] = arguments[_key];
}
if (typeof String.prototype.replaceAll !== 'undefined') {
return string.replaceAll.apply(string, arguments_);
}
/* istanbul ignore next */
return ponyfill.apply(void 0, [string].concat(arguments_));
};
exports.default = ponyfill;
exports.preferNative = preferNative;
//# sourceMappingURL=index.js.map