| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- 'use strict';
 
- var $TypeError = require('es-errors/type');
 
- var GetIntrinsic = require('get-intrinsic');
 
- var callBound = require('call-bound');
 
- var hasOwn = require('hasown');
 
- var caseFolding = require('./caseFolding.json');
 
- var IsArray = require('./IsArray');
 
- var isLeadingSurrogate = require('./isLeadingSurrogate');
 
- var isTrailingSurrogate = require('./isTrailingSurrogate');
 
- var $charCodeAt = callBound('%String.prototype.charCodeAt%');
 
- var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
 
- /* eslint func-style: 0  */
 
- function CharSet(test, yieldCh) {
 
- 	if (typeof test !== 'function') {
 
- 		throw new $TypeError('Assertion failed: `test` must be a function');
 
- 	}
 
- 	if (typeof yieldCh !== 'function') {
 
- 		throw new $TypeError('Assertion failed: `yield` must be a function');
 
- 	}
 
- 	this.test = test;
 
- 	this.yield = yieldCh;
 
- }
 
- CharSet.prototype.count = function () {
 
- 	var count = 0;
 
- 	this.yield(function () { count += 1; });
 
- 	return count;
 
- };
 
- function testCodeUnits(CharSetElement) {
 
- 	if (typeof CharSetElement !== 'string') {
 
- 		throw new $TypeError('Assertion failed: `CharSetElement` must be a string');
 
- 	}
 
- 	return CharSetElement.length !== 1;
 
- }
 
- function yieldCodeUnits(emit) {
 
- 	for (var i = 0; i <= 0xDFFF; i += 1) {
 
- 		emit($fromCharCode(i));
 
- 	}
 
- }
 
- function testCodePoints(CharSetElement) {
 
- 	if (typeof CharSetElement !== 'string') {
 
- 		throw new $TypeError('Assertion failed: `CharSetElement` must be a string');
 
- 	}
 
- 	if (CharSetElement.length === 1) {
 
- 		return true;
 
- 	}
 
- 	if (CharSetElement.length === 2) {
 
- 		var hi = $charCodeAt(CharSetElement, 0);
 
- 		var lo = $charCodeAt(CharSetElement, 1);
 
- 		return isLeadingSurrogate(hi) && isTrailingSurrogate(lo);
 
- 	}
 
- 	return false;
 
- }
 
- function yieldCodePoints(emit) {
 
- 	for (var i = 0; i <= 0xDFFF; i += 1) {
 
- 		emit($fromCharCode(i));
 
- 	}
 
- 	for (var u = 0x10000; u <= 0x10FFFF; u += 1) {
 
- 		var cp = u - 0x10000;
 
- 		var high = (cp >> 10) + 0xD800;
 
- 		var low = (cp & 0x3FF) + 0xDC00;
 
- 		emit($fromCharCode(high, low));
 
- 	}
 
- }
 
- function charsToMap(chars) {
 
- 	if (!IsArray(chars)) {
 
- 		throw new $TypeError('Assertion failed: `chars` must be an array');
 
- 	}
 
- 	var map = { __proto__: null };
 
- 	for (var i = 0; i < chars.length; i += 1) {
 
- 		var char = chars[i];
 
- 		if (typeof char !== 'string' || (char.length !== 1 && char.length !== 2)) {
 
- 			throw new $TypeError('Assertion failed: `chars` must be an array of strings of length 1');
 
- 		}
 
- 		map[char] = true;
 
- 	}
 
- 	return map;
 
- }
 
- module.exports = {
 
- 	CharSet: CharSet,
 
- 	from: function from(chars) {
 
- 		var map = charsToMap(chars);
 
- 		return new CharSet(
 
- 			function test(CharSetElement) {
 
- 				return hasOwn(map, CharSetElement);
 
- 			},
 
- 			function yieldChar(emit) {
 
- 				// eslint-disable-next-line no-restricted-syntax
 
- 				for (var k in map) {
 
- 					if (hasOwn(map, k)) {
 
- 						emit(k);
 
- 					}
 
- 				}
 
- 			}
 
- 		);
 
- 	},
 
- 	getCodeUnits: function () {
 
- 		return new CharSet(testCodeUnits, yieldCodeUnits);
 
- 	},
 
- 	getCodePoints: function () {
 
- 		return new CharSet(testCodePoints, yieldCodePoints);
 
- 	},
 
- 	getNonSimpleCaseFoldingCodePoints: function () {
 
- 		return new CharSet(
 
- 			function test(CharSetElement) {
 
- 				return testCodePoints(CharSetElement) && !hasOwn(caseFolding.S, CharSetElement);
 
- 			},
 
- 			function yieldChar(emit) {
 
- 				yieldCodePoints(function (CharSetElement) {
 
- 					if (!hasOwn(caseFolding.S, CharSetElement)) {
 
- 						emit(CharSetElement);
 
- 					}
 
- 				});
 
- 			}
 
- 		);
 
- 	}
 
- };
 
 
  |