| 'use strict'; |
| var $ = require('../internals/export'); |
| var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f; |
| var toLength = require('../internals/to-length'); |
| var notARegExp = require('../internals/not-a-regexp'); |
| var requireObjectCoercible = require('../internals/require-object-coercible'); |
| var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic'); |
| var IS_PURE = require('../internals/is-pure'); |
| |
| var nativeEndsWith = ''.endsWith; |
| var min = Math.min; |
| |
| var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith'); |
| // https://github.com/zloirock/core-js/pull/702 |
| var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () { |
| var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith'); |
| return descriptor && !descriptor.writable; |
| }(); |
| |
| // `String.prototype.endsWith` method |
| // https://tc39.github.io/ecma262/#sec-string.prototype.endswith |
| $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { |
| endsWith: function endsWith(searchString /* , endPosition = @length */) { |
| var that = String(requireObjectCoercible(this)); |
| notARegExp(searchString); |
| var endPosition = arguments.length > 1 ? arguments[1] : undefined; |
| var len = toLength(that.length); |
| var end = endPosition === undefined ? len : min(toLength(endPosition), len); |
| var search = String(searchString); |
| return nativeEndsWith |
| ? nativeEndsWith.call(that, search, end) |
| : that.slice(end - search.length, end) === search; |
| } |
| }); |