| 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);					}				});			}		);	}};
 |