```ts
/**
 * Merges overlapping intervals into the smallest list of non-overlapping pairs,
 * covering all points sorted ascending by start.
 *
 * @param intervals list of [start, end] pairs
 * @returns new list of merged non-overlapping intervals
 */
export function mergeIntervals(intervals: number[][]): number[][] {
    // Filter for invalid start values (i.e., greater than end)
    const invalidStarts = intervals.filter(([start, _]) => start > _);
    
    if (invalidStarts.length) {
        throw new Error("Invalid interval: start must be less than or equal to end");
    }
    
    // Sort by start value
    intervals.sort(([, b], [, a]) => a - b);
    
    const merged: number[][] = [];
    let currentEnd = -Infinity;
    
    for (const [start, end] of intervals) {
        if (start <= currentEnd) {
            currentEnd = Math.max(currentEnd, end);
        } else {
            merged.push([start, currentEnd]);
            currentEnd = end;
        }
    }
    
    // Add the last one
    merged.push([currentEnd, currentEnd]);
    
    return merged;
}
```