From d77be18d429fd70b303de7da2aaa0a9246bfeda7 Mon Sep 17 00:00:00 2001 From: Martin Eneqvist Date: Fri, 6 Sep 2024 09:56:14 +0200 Subject: [PATCH] Fix index-as-message bug in `assertArray` As `assertArray` previously called the assertion function in a `forEach(assertion)`, the index was passed as the custom message. This commit fixes this bug by passing down the `message` argument to the assertion function. A `@ts-expect-error` comment was added to due to "Assertions require every name in the call target to be declared with an explicit type annotation.". --- source/index.ts | 9 ++++++--- test/test.ts | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/source/index.ts b/source/index.ts index 9fd1923..6c90a0d 100644 --- a/source/index.ts +++ b/source/index.ts @@ -1143,14 +1143,17 @@ export function assertAny(predicate: Predicate | Predicate[], ...values: unknown } } -export function assertArray(value: unknown, assertion?: (element: unknown) => asserts element is T, message?: string): asserts value is T[] { +export function assertArray(value: unknown, assertion?: (element: unknown, message?: string) => asserts element is T, message?: string): asserts value is T[] { if (!isArray(value)) { throw new TypeError(message ?? typeErrorMessage('Array', value)); } if (assertion) { - // eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference - value.forEach(assertion); + // eslint-disable-next-line unicorn/no-array-for-each + value.forEach(v => { + // @ts-expect-error: "Assertions require every name in the call target to be declared with an explicit type annotation." + assertion(v, message); + }); } } diff --git a/test/test.ts b/test/test.ts index 4017cc3..258fb89 100644 --- a/test/test.ts +++ b/test/test.ts @@ -773,6 +773,10 @@ test('is.array', t => { x[0]?.toFixed(0); } }); + + t.throws(() => { + assert.array([1, '2'], assert.number, 'Expected numbers'); + }, {message: /Expected numbers/}); }); test('is.function', t => {