/* Used to convert jest's Tagged Template literals to object arrays as required by vitest. Example: Jest code ```ts it.each` str | expected ${'1d'} | ${moment.duration(1, 'd')} ${'2w'} | ${moment.duration(2, 'w')} `('should parse $str to $expected duration', ({ str, expected }) => { expect(yourFunction(str)).toEqual(expected); }); ``` Vitest code ```ts it.each(convert` str | expected ${'1d'} | ${moment.duration(1, 'd')} ${'2w'} | ${moment.duration(2, 'w')} `)('should parse $str to $expected duration', ({ str, expected }) => { expect(yourFunction(str)).toEqual(expected); }); ``` */ export const convert = (template: TemplateStringsArray, ...params: any[]) => { const header = template[0] .trim() .split('|') .map((s) => s.trim()); if (header.length === 0 || params.length % header.length !== 0) { throw new Error('Table column count mismatch'); } const chunkSize = header.length; const out = []; for (let i = 0; i < params.length; i += chunkSize) { const chunk = params.slice(i, i + chunkSize); out.push(Object.fromEntries(chunk.map((v, i) => [header[i], v]))); } return out; };