```ts
export function mergeIntervals(intervals: number[][]): number[][] {
    if (intervals.some(([start, end]) => start > end)) {
        throw new Error("Invalid interval found: cannot have a start greater than an end.");
    }

    return intervals.sort((a, b) => a[0] - b[0]).reduce((merged, current) => {
        const lastMerged = merged[merged.length - 1];
        if (current[0] <= lastMerged[1]) {
            lastMerged[1] = Math.max(lastMerged[1], current[1]);
            return merged;
        }
        return [...merged, current];
    }, []);
}
```