```typescript
export function mergeIntervals(intervals: number[][]): number[][] {
    if (!Array.isArray(intervals) || intervals.some(([x, y]) => !Number.isInteger(x) || !Number.isInteger(y) || x > y)) {
        throw new Error('Invalid input');
    }

    const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
    const result: number[][] = [];
    let current = sorted[0];

    for (let i = 1; i < sorted.length; ++i) {
        if (sorted[i][0] <= current[1]) {
            current[1] = Math.max(current[1], sorted[i][1]);
        } else {
            result.push([...current]);
            current = sorted[i];
        }
    }

    if (!result.length || current[0] !== result[result.length - 1][0]) {
        result.push([...current]);
    }

    return result;
}
```