Sha256: 14350bc53c55373911291fb9dd3a0a88cdc36da8fe1a602963c16810df26d904

Contents?: true

Size: 1.68 KB

Versions: 31

Compression:

Stored size: 1.68 KB

Contents

'use strict';

var GetIntrinsic = require('get-intrinsic');

var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('call-bind/callBound');
var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');

var Type = require('./Type');
var UTF16DecodeSurrogatePair = require('./UTF16DecodeSurrogatePair');

var $charAt = callBound('String.prototype.charAt');
var $charCodeAt = callBound('String.prototype.charCodeAt');

// https://262.ecma-international.org/11.0/#sec-codepointat

module.exports = function CodePointAt(string, position) {
	if (Type(string) !== 'String') {
		throw new $TypeError('Assertion failed: `string` must be a String');
	}
	var size = string.length;
	if (position < 0 || position >= size) {
		throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');
	}
	var first = $charCodeAt(string, position);
	var cp = $charAt(string, position);
	var firstIsLeading = isLeadingSurrogate(first);
	var firstIsTrailing = isTrailingSurrogate(first);
	if (!firstIsLeading && !firstIsTrailing) {
		return {
			'[[CodePoint]]': cp,
			'[[CodeUnitCount]]': 1,
			'[[IsUnpairedSurrogate]]': false
		};
	}
	if (firstIsTrailing || (position + 1 === size)) {
		return {
			'[[CodePoint]]': cp,
			'[[CodeUnitCount]]': 1,
			'[[IsUnpairedSurrogate]]': true
		};
	}
	var second = $charCodeAt(string, position + 1);
	if (!isTrailingSurrogate(second)) {
		return {
			'[[CodePoint]]': cp,
			'[[CodeUnitCount]]': 1,
			'[[IsUnpairedSurrogate]]': true
		};
	}

	return {
		'[[CodePoint]]': UTF16DecodeSurrogatePair(first, second),
		'[[CodeUnitCount]]': 2,
		'[[IsUnpairedSurrogate]]': false
	};
};

Version data entries

31 entries across 30 versions & 4 rubygems

Version Path
immosquare-cleaner-0.1.32 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.31 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.30 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.29 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.28 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.27 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.26 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.25 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.24 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.23 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.22 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.21 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.20 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.19 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.18 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.17 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.16 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.14 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.13 node_modules/es-abstract/2020/CodePointAt.js
immosquare-cleaner-0.1.12 node_modules/es-abstract/2020/CodePointAt.js