From 3c61f71b4100c62c31c2d0b4a47e74edb2047fa2 Mon Sep 17 00:00:00 2001 From: Mark Lundin Date: Wed, 24 Sep 2025 11:11:17 +0100 Subject: [PATCH 1/2] Refactor validation utility to instantiate Vec2, Vec3, Vec4, and Quat directly from array inputs in createComponentDefinition function --- packages/lib/src/utils/validation.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/lib/src/utils/validation.ts b/packages/lib/src/utils/validation.ts index 282ffcc..7550fcd 100644 --- a/packages/lib/src/utils/validation.ts +++ b/packages/lib/src/utils/validation.ts @@ -377,7 +377,7 @@ export function createComponentDefinition( errorMsg: (val) => `Invalid value for prop "${String(key)}": "${JSON.stringify(val)}". ` + `Expected an array of 2 numbers.`, apply: isDefinedWithSetter ? (instance, props, key) => { - (instance[key as keyof InstanceType] as Vec2).fromArray(props[key] as number[]); + (instance[key as keyof InstanceType] as Vec2) = new Vec2().fromArray(props[key] as number[]); } : (instance, props, key) => { (instance[key as keyof InstanceType] as Vec2).set(...props[key] as [number, number]); } @@ -391,7 +391,7 @@ export function createComponentDefinition( errorMsg: (val) => `Invalid value for prop "${String(key)}": "${JSON.stringify(val)}". ` + `Expected an array of 3 numbers.`, apply: isDefinedWithSetter ? (instance, props, key) => { - (instance[key as keyof InstanceType] as Vec3).fromArray(props[key] as number[]); + (instance[key as keyof InstanceType] as Vec3) = new Vec3().fromArray(props[key] as number[]); } : (instance, props, key) => { (instance[key as keyof InstanceType] as Vec3).set(...props[key] as [number, number, number]); } @@ -404,7 +404,7 @@ export function createComponentDefinition( default: [value.x, value.y, value.z, value.w], errorMsg: (val) => `Invalid value for prop "${String(key)}": "${JSON.stringify(val)}". Expected an array of 4 numbers.`, apply: isDefinedWithSetter ? (instance, props, key) => { - (instance[key as keyof InstanceType] as Vec4).fromArray(props[key] as number[]); + (instance[key as keyof InstanceType] as Vec4) = new Vec4().fromArray(props[key] as number[]); } : (instance, props, key) => { (instance[key as keyof InstanceType] as Vec4).set(...props[key] as [number, number, number, number]); } @@ -419,7 +419,7 @@ export function createComponentDefinition( errorMsg: (val) => `Invalid value for prop "${String(key)}": "${JSON.stringify(val)}". ` + `Expected an array of 4 numbers.`, apply: isDefinedWithSetter ? (instance, props, key) => { - (instance[key as keyof InstanceType] as Quat).fromArray(props[key] as number[]); + (instance[key as keyof InstanceType] as Quat) = new Quat().fromArray(props[key] as number[]); } : (instance, props, key) => { (instance[key as keyof InstanceType] as Quat).set(...props[key] as [number, number, number, number]); } From dd927015ac20e91d69fed5dd945492eca476fb52 Mon Sep 17 00:00:00 2001 From: Mark Lundin Date: Wed, 24 Sep 2025 11:13:37 +0100 Subject: [PATCH 2/2] Add patch for @playcanvas/react to ensure proper invocation of member setters --- .changeset/easy-friends-wash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/easy-friends-wash.md diff --git a/.changeset/easy-friends-wash.md b/.changeset/easy-friends-wash.md new file mode 100644 index 0000000..f7fa8d4 --- /dev/null +++ b/.changeset/easy-friends-wash.md @@ -0,0 +1,5 @@ +--- +"@playcanvas/react": patch +--- + +Ensure any member defined with a setter is called appropriately