From 29d8e11d83aea9b84095670028d30d2457d2bde3 Mon Sep 17 00:00:00 2001 From: Perryvw Date: Thu, 14 Apr 2022 20:50:27 +0200 Subject: [PATCH] Fix exception trying to push single element to optional chain array --- src/transformation/utils/typescript/index.ts | 4 ++-- test/unit/builtins/array.spec.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/transformation/utils/typescript/index.ts b/src/transformation/utils/typescript/index.ts index f9c60f583..5f603f98e 100644 --- a/src/transformation/utils/typescript/index.ts +++ b/src/transformation/utils/typescript/index.ts @@ -25,9 +25,9 @@ export function findFirstNodeAbove(node: ts.Node, callback: ( } export function findFirstNonOuterParent(node: ts.Node): ts.Node { - let current = node.parent; + let current = ts.getOriginalNode(node).parent; while (ts.isOuterExpression(current)) { - current = current.parent; + current = ts.getOriginalNode(current).parent; } return current; } diff --git a/test/unit/builtins/array.spec.ts b/test/unit/builtins/array.spec.ts index b86a07fa1..6c73c1588 100644 --- a/test/unit/builtins/array.spec.ts +++ b/test/unit/builtins/array.spec.ts @@ -497,6 +497,15 @@ test("array.push(...)", () => { `.expectToMatchJsResult(); }); +// https://github.com/TypeScriptToLua/TypeScriptToLua/issues/1256 +test.each(["[1, 2, 3]", "undefined"])("array push on optional array", value => { + util.testFunction` + const arr = ${value} as number[] | undefined; + arr?.push(4); + return arr + `.expectToMatchJsResult(); +}); + test.each([ { array: [1, 2, 3], expected: [3, 2] }, { array: [1, 2, 3, null], expected: [3, 2] },