You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							27 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							27 lines
						
					
					
						
							1.1 KiB
						
					
					
				var toInteger = require('../internals/to-integer'); | 
						|
var requireObjectCoercible = require('../internals/require-object-coercible'); | 
						|
 | 
						|
// `String.prototype.{ codePointAt, at }` methods implementation | 
						|
var createMethod = function (CONVERT_TO_STRING) { | 
						|
  return function ($this, pos) { | 
						|
    var S = String(requireObjectCoercible($this)); | 
						|
    var position = toInteger(pos); | 
						|
    var size = S.length; | 
						|
    var first, second; | 
						|
    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; | 
						|
    first = S.charCodeAt(position); | 
						|
    return first < 0xD800 || first > 0xDBFF || position + 1 === size | 
						|
      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF | 
						|
        ? CONVERT_TO_STRING ? S.charAt(position) : first | 
						|
        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; | 
						|
  }; | 
						|
}; | 
						|
 | 
						|
module.exports = { | 
						|
  // `String.prototype.codePointAt` method | 
						|
  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat | 
						|
  codeAt: createMethod(false), | 
						|
  // `String.prototype.at` method | 
						|
  // https://github.com/mathiasbynens/String.prototype.at | 
						|
  charAt: createMethod(true) | 
						|
};
 | 
						|
 |