```ts
/**
 * Transcribes the source string using the provided table of rules.
 * @param source - The input string to be transcribed.
 * @param table - An array of [pattern, output] pairs representing the transcription rules.
 * @returns The transcribed string.
 */
export function transcribeRunes(source: string, table: Array<[string, string]>): string {
  if (table.some(([pattern]) => pattern === '')) {
    throw new Error('Table contains a rule with an empty pattern.');
  }

  let result = '';
  let position = 0;

  while (position < source.length) {
    const [matched, output] = table.find(([pattern]) => source.startsWith(pattern, position)) || [source[position], ''];
    result += output;
    position += matched.length || 1;
  }

  return result;
}
```