```ts
export function chunk<T>(items: readonly T[], size: number): T[][] {
    if (size <= 0) throw new Error('Size must be a positive integer');
    return items.reduce((groups, item, index) => {
        const group = groups[groups.length - 1] || [];
        if (group.length < size) group.push(item);
        else {
            groups.push([item]);
        }
        return groups;
    }, []);
}
```