| 'use strict'; | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var toIntegerOrInfinity = require('../internals/to-integer-or-infinity'); | 
| var toString = require('../internals/to-string'); | 
| var requireObjectCoercible = require('../internals/require-object-coercible'); | 
|   | 
| var charAt = uncurryThis(''.charAt); | 
| var charCodeAt = uncurryThis(''.charCodeAt); | 
| var stringSlice = uncurryThis(''.slice); | 
|   | 
| var createMethod = function (CONVERT_TO_STRING) { | 
|   return function ($this, pos) { | 
|     var S = toString(requireObjectCoercible($this)); | 
|     var position = toIntegerOrInfinity(pos); | 
|     var size = S.length; | 
|     var first, second; | 
|     if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; | 
|     first = charCodeAt(S, position); | 
|     return first < 0xD800 || first > 0xDBFF || position + 1 === size | 
|       || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF | 
|         ? CONVERT_TO_STRING | 
|           ? charAt(S, position) | 
|           : first | 
|         : CONVERT_TO_STRING | 
|           ? stringSlice(S, position, position + 2) | 
|           : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; | 
|   }; | 
| }; | 
|   | 
| module.exports = { | 
|   // `String.prototype.codePointAt` method | 
|   // https://tc39.es/ecma262/#sec-string.prototype.codepointat | 
|   codeAt: createMethod(false), | 
|   // `String.prototype.at` method | 
|   // https://github.com/mathiasbynens/String.prototype.at | 
|   charAt: createMethod(true) | 
| }; |