```ts
/**
 * Joins a list of names into a single phrase using Oxford commas.
 * Two names are joined by "and; ", three or more take a comma between every pair but the last, which takes "and".
 * One name stands alone and no names give empty text.
 * 
 * @param names - The array of names to join.
 * @returns A string with the names joined together in Oxford commas.
 */
export function oxfordJoin(names: string[]): string {
  if (names.length === 0) return '';

  let result = '';
  for (let i = 0; i < names.length; i++) {
    if (i > 0 && names[i] !== '') {
      result += ', ';
    }
    result += names[i];
  }

  return result;
}
```