```ts

export function mergeIntervals(intervals: number[][]): number[][] {
  if (!Array.isArray(intervals) || intervals.length === 0)
    throw new Error("Input must be a non-empty array of [start, end] pairs");

  return intervals.sort((a, b) => a[0] - b[0])
               .reduce((merged, current) => {
                 const last = merged.length ? merged[merged.length - 1] : [];

                 if (current[0] <= last[1]) {
                   // Merge intervals
                   last[1] = Math.max(last[1], current[1]);
                 } else {
                   // No overlap, add current interval as a new one
                   merged.push(current);
                 }

                 return merged;
               }, [] as number[][]);
}
```