```ts
// solution.ts

/**
 * Lowercases a word and drops every character that is not a letter or a digit.
 * @param word - The word to slugify.
 * @returns The slugged version of the word.
 */
export function slugWord(word: string): string {
  return word.toLowerCase().replace(/[^a-z0-9]/g, '');
}

/**
 * Joins the slugged words of a phrase with single hyphens, leaving out any word that slugs away to nothing.
 * @param phrase - The phrase to slugify.
 * @returns The slugged version of the phrase.
 */
export function slugMake(phrase: string): string {
  return phrase.split(' ').map(slugWord).filter(word => word.length > 0).join('-');
}
```