```ts
export function explodeKit(catalog: Record<string, { makes: number; parts: [string, number][] }>, kit: string, want: number): Record<string, number> {
  if (want <= 0) {
    throw new Error("Invalid want value");
  }

  const result: Record<string, number> = {};

  function countParts(kitName: string, need: number): void {
    const recipe = catalog[kitName];
    if (!recipe) {
      throw new Error(`Kit not found in catalog: ${kitName}`);
    }
    const runs = Math.ceil(need / recipe.makes);
    for (const [part, count] of recipe.parts) {
      result[part] = (result[part] || 0) + count * runs;
      if (catalog[part]) {
        countParts(part, count * runs);
      }
    }
  }

  countParts(kit, want);
  return result;
}
```