mergeSets = (a, b) => {
	if (!b || b.size === 0) return /** @type {Set<T>} */ (a);
	if (!a || a.size === 0) return /** @type {Set<T>} */ (b);
	/** @type {Set<T>} */
	const map = new Set(a);
	for (const item of b) {
		map.add(item);
	}
	return map;
}
@template T
@param {Set<T> | undefined} a source map
@param {Set<T> | undefined} b joining map
@returns {Set<T>} joined map