| 'use strict'; | 
|   | 
| var GetIntrinsic = require('get-intrinsic'); | 
|   | 
| var CodePointAt = require('./CodePointAt'); | 
| var IsIntegralNumber = require('./IsIntegralNumber'); | 
| var Type = require('./Type'); | 
|   | 
| var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); | 
|   | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
|   | 
| // https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex | 
|   | 
| module.exports = function AdvanceStringIndex(S, index, unicode) { | 
|     if (Type(S) !== 'String') { | 
|         throw new $TypeError('Assertion failed: `S` must be a String'); | 
|     } | 
|     if (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) { | 
|         throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); | 
|     } | 
|     if (Type(unicode) !== 'Boolean') { | 
|         throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); | 
|     } | 
|     if (!unicode) { | 
|         return index + 1; | 
|     } | 
|     var length = S.length; | 
|     if ((index + 1) >= length) { | 
|         return index + 1; | 
|     } | 
|     var cp = CodePointAt(S, index); | 
|     return index + cp['[[CodeUnitCount]]']; | 
| }; |