```typescript
// solution.ts

export function stampTable(dies: [string, number][]): Map<string, number> {
    const table = new Map<string, number>();
    for (const [fragment, price] of dies) {
        if (!/^[^\s]+$/.test(fragment)) throw new Error("Fragment must be a non-empty string.");
        if (!Number.isInteger(price) || price <= 0) throw new Error("Price must be a positive integer.");
        if (table.has(fragment)) throw new Error("Duplicate fragment found in dies.");
        table.set(fragment, price);
    }
    return table;
}

export function stampCover(label: string, dies: [string, number][]): number {
    const prices = new Map<string, number>();
    for (const die of dies) {
        if (!/^[^\s]+$/.test(die[0])) throw new Error("Fragment must be a non-empty string.");
        const [fragment, price] = die;
        if (!prices.has(fragment)) prices.set(fragment, 0);
        prices.set(fragment, Math.min(prices.get(fragment)! + price, Infinity));
    }

    let totalCost = Infinity;
    for (const fragment of label.split('')) {
        if (!prices.has(fragment)) throw new Error("Label contains a fragment not in dies.");
        totalCost = Math.min(totalCost, prices.get(fragment)!);
    }

    return totalCost === Infinity ? -1 : totalCost;
}
```