UNPKG

json-schema-library

Version:

Customizable and hackable json-validator and json-schema utilities for traversal, data generation and validation

43 lines (41 loc) 1.59 kB
/* eslint no-bitwise: 0 */ /** * taken from punycode@2.1.0 * * Creates an array containing the numeric code points of each Unicode * character in the string. While JavaScript uses UCS-2 internally, * this function will convert a pair of surrogate halves (each of which * UCS-2 exposes as separate characters) into a single code point, * matching UTF-16. * @see `punycode.ucs2.encode` * @see <https://mathiasbynens.be/notes/javascript-encoding> * @memberOf punycode.ucs2 * @name decode * @param string The Unicode input string (UCS-2). * @returns The new array of code points. */ export default function ucs2decode(string: string): string[] { const output = []; let counter = 0; const length = string.length; while (counter < length) { const value = string.charCodeAt(counter++); if (value >= 0xd800 && value <= 0xdbff && counter < length) { // It's a high surrogate, and there is a next character. const extra = string.charCodeAt(counter++); // eslint-disable-next-line eqeqeq if ((extra & 0xfc00) == 0xdc00) { // Low surrogate. output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000); } else { // It's an unmatched surrogate; only append this code unit, in case the // next code unit is the high surrogate of a surrogate pair. output.push(value); counter--; } } else { output.push(value); } } return output as unknown as string[]; }