First of all, many thanks for your efforts!
Better to drop argument type for Encoder::escapeValue as compatibility is broken when the source array contains integers.
private function escapeValue( >>string<< &$str): string
Fatal error: Uncaught TypeError: Argument 1 passed to EDI\Encoder::escapeValue() must be of the type string, integer given