Проблема
Добавьте клиентские потоки в список всех заданных потоков. Не все потоки являются хост-потоками.
Как помогла теория множеств
Все потоки в исходном списке должны находиться в целевом списке. Если есть какие-либо клиентские потоки, они также будут включены в список источников. Функция биективная приведет к тому, что целевой список всегда будет содержать то же количество элементов, что и исходный список. Инъективная функция должна использовать все элементы из источника. Вооружившись этими знаниями, я понял, что вместо использования функции отображения (всегда биективной) необходима функция сокращения (возможно, инъективная). Результат? Правильная программа и красивый алгоритм.
sourceList.reduce((targetList, stream) => stream.hasClient ? [...targetList, stream, new ClientStream(stream)] : [...targetList, stream], [] );