From 3f2461508a447464842b5f307477424f8104a0c2 Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Wed, 17 Sep 2025 00:18:21 +0300 Subject: [PATCH] fix: do not report values that may be a promise in an array literal --- .../eslint-plugin/src/rules/await-thenable.ts | 15 ++++++++++++++- .../tests/rules/await-thenable.test.ts | 12 ++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/await-thenable.ts b/packages/eslint-plugin/src/rules/await-thenable.ts index 8c84eacc8788..70c87cc5d918 100644 --- a/packages/eslint-plugin/src/rules/await-thenable.ts +++ b/packages/eslint-plugin/src/rules/await-thenable.ts @@ -111,7 +111,7 @@ export default createRule<[], MessageId>({ const type = getConstrainedTypeAtLocation(services, element); const tsNode = services.esTreeNodeToTSNodeMap.get(element); - if (containsNonAwaitableType(type, tsNode, checker)) { + if (isAlwaysNonAwaitableType(type, tsNode, checker)) { context.report({ node: element, messageId: 'invalidPromiseAggregatorInput', @@ -281,6 +281,19 @@ function getValueTypesOfArrayLike( return null; } +function isAlwaysNonAwaitableType( + type: ts.Type, + node: ts.Node, + checker: ts.TypeChecker, +): boolean { + return tsutils + .unionConstituents(type) + .every( + typeArgumentPart => + needsToBeAwaited(checker, node, typeArgumentPart) === Awaitable.Never, + ); +} + function containsNonAwaitableType( type: ts.Type, node: ts.Node, diff --git a/packages/eslint-plugin/tests/rules/await-thenable.test.ts b/packages/eslint-plugin/tests/rules/await-thenable.test.ts index f1729d908bdb..0556ce4803de 100644 --- a/packages/eslint-plugin/tests/rules/await-thenable.test.ts +++ b/packages/eslint-plugin/tests/rules/await-thenable.test.ts @@ -683,6 +683,18 @@ Promise.all([ Promise.resolve(2), Promise.resolve(3), ...[Promise.resolve(4), Promise.resolve(5), Promise.resolve(6)], +]); + `, + }, + { + code: ` +declare const maybePromise: Promise | number; + +Promise.all([ + maybePromise, + Promise.resolve(1), + Promise.resolve(2), + Promise.resolve(3), ]); `, },