UNPKG

string-replace-all-ponyfill

Version:
66 lines (50 loc) 2.08 kB
'use strict'; 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