From d7fb600247d82f43e4cb16064c051664fc8c54d9 Mon Sep 17 00:00:00 2001 From: 5ZYSZ3K Date: Thu, 18 Jun 2026 10:57:32 +0200 Subject: [PATCH 1/3] fix: remove transform keys before appending new ones --- src/native/objects.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/native/objects.ts b/src/native/objects.ts index 12e69ccd..2c22ce0d 100644 --- a/src/native/objects.ts +++ b/src/native/objects.ts @@ -69,8 +69,14 @@ export function applyValue( const transformArray: Record[] = target.transform; - // Remove any existing values + // Remove any existing values ​​and any keys that are to be appended next target.transform = transformArray.filter((t) => !(prop in t)); + const keysToRemove = Array.isArray(value) + ? new Set(value.flatMap((v) => Object.keys(v))) + : new Set([prop]); + target.transform = transformArray.filter( + (t) => !(prop in t) && !Object.keys(t).some((k) => keysToRemove.has(k)), + ); if (Array.isArray(value)) { target.transform.push(...value); From 5f60ade14dbe97af7adb56af69f2bd0885e989b7 Mon Sep 17 00:00:00 2001 From: 5ZYSZ3K Date: Thu, 18 Jun 2026 11:09:59 +0200 Subject: [PATCH 2/3] fix: apply copilot suggestion --- src/native/objects.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/native/objects.ts b/src/native/objects.ts index 2c22ce0d..bcf20be4 100644 --- a/src/native/objects.ts +++ b/src/native/objects.ts @@ -69,10 +69,13 @@ export function applyValue( const transformArray: Record[] = target.transform; - // Remove any existing values ​​and any keys that are to be appended next - target.transform = transformArray.filter((t) => !(prop in t)); + // Remove any existing values and any keys that are to be appended next const keysToRemove = Array.isArray(value) - ? new Set(value.flatMap((v) => Object.keys(v))) + ? new Set( + value.flatMap((v) => + v && typeof v === "object" ? Object.keys(v) : [], + ), + ) : new Set([prop]); target.transform = transformArray.filter( (t) => !(prop in t) && !Object.keys(t).some((k) => keysToRemove.has(k)), From 1ee078a851a0e36fe18c431d943f8d5d66cc8386 Mon Sep 17 00:00:00 2001 From: 5ZYSZ3K Date: Thu, 18 Jun 2026 11:50:27 +0200 Subject: [PATCH 3/3] fix: add test for duplicated translate objects --- src/__tests__/native/transform.test.tsx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/__tests__/native/transform.test.tsx b/src/__tests__/native/transform.test.tsx index b7a08fca..e0f30d02 100644 --- a/src/__tests__/native/transform.test.tsx +++ b/src/__tests__/native/transform.test.tsx @@ -45,10 +45,10 @@ describe("scale", () => { test("unparsed", () => { registerCSS(` - .my-class { + .my-class { --scale-x: 2%; --scale-y: 2%; - scale: var(--scale-x) var(--scale-y); + scale: var(--scale-x) var(--scale-y); } `); const component = render( @@ -153,4 +153,24 @@ describe("transform", () => { transform: [{ translateX: "10%" }, { scaleX: 2 }], }); }); + + test.only("no duplicated translate objects", () => { + registerCSS(` +.translate-x-1 { + --tw-translate-x: 4px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)); +} +.translate-y-1 { + --tw-translate-y: 4px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)); +}`); + + const component = render( + , + ).getByTestId(testID); + + expect(component.props.style).toStrictEqual({ + transform: [{ translateX: 4 }, { translateY: 4 }], + }); + }); });