```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. Must be a positive number.');

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

    function consumeKit(kitName: string, unitsNeeded: number): void {
        const recipe = catalog[kitName];
        if (!recipe) throw new Error(`Unknown kit: ${kitName}`);

        const runsRequired = Math.ceil(unitsNeeded / recipe.makes);
        for (const [part, count] of recipe.parts) {
            result[part] = (result[part] || 0) + part in catalog ? consumeKit(part, runsRequired * count) : runsRequired * count;
        }
    }

    consumeKit(kit, want);

    return result;
}
```