 ```ts
import { strict as assert } from 'assert';

export function chunk<T>(items: readonly T[], size: number): T[][] {
    if (size <= 0) {
        throw new Error('size must be a positive integer');
    }

    const result: T[][] = [];
    for (let index = 0; index < items.length; index += size) {
        result.push(items.slice(index, index + size));
    }
    return result;
}

// Test cases
// assert.deepStrictEqual(chunk([1, 2, 3], 1), [[1], [2], [3]]);
// assert.deepStrictEqual(chunk([], 5), []);
// assert.deepStrictEqual(chunk([{ name: 'Alice' }], 0), []);

console.log('All test cases passed!');
```