```ts

/**
 * The words grouped by their length, in first-seen order.
 */
export function groupByLength(words: readonly string[]): Map<number, string[]> {
  const groups = new	Map();

  for (const word of words) {
    const bucket = groups.get(word.length);
    if (!bucket) groups.set(word.length, [word]);
    else if (bucket.some((existingWord) => existingWord === word)) continue;
    bucket.push(word);
  }

  return groups;
}
```