From b343ec6bd8d17c35c06e4ebdf38ef2a617d86a6d Mon Sep 17 00:00:00 2001 From: wouterlucas Date: Wed, 6 Nov 2024 19:20:10 +0100 Subject: [PATCH 1/2] fix: Inspector get properties from prototype --- src/main-api/Inspector.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main-api/Inspector.ts b/src/main-api/Inspector.ts index 343e497e..c78b877e 100644 --- a/src/main-api/Inspector.ts +++ b/src/main-api/Inspector.ts @@ -270,10 +270,26 @@ export class Inspector { node: CoreNode | CoreTextNode, div: HTMLElement, ): CoreNode | CoreTextNode { + const updateNodePropertyWrapper = ( + div: HTMLElement, + property: keyof CoreNodeProps | keyof CoreTextNodeProps, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any, + ) => { + this.updateNodeProperty(div, property, value); + }; + // Define traps for each property in knownProperties knownProperties.forEach((property) => { - const originalProp = Object.getOwnPropertyDescriptor(node, property); - if (!originalProp) { + let originalProp = Object.getOwnPropertyDescriptor(node, property); + + if (originalProp === undefined) { + // Search the prototype chain for the property descriptor + const proto = Object.getPrototypeOf(node) as CoreNode | CoreTextNode; + originalProp = Object.getOwnPropertyDescriptor(proto, property); + } + + if (originalProp === undefined) { return; } @@ -281,12 +297,16 @@ export class Inspector { [property]: { get() { // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return originalProp.get?.call(node); + return originalProp?.get?.call(node); }, set(value) { - originalProp.set?.call(node, value); + originalProp?.set?.call(node, value); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - this.updateNodeProperty(div, property, value); + updateNodePropertyWrapper( + div, + property as keyof CoreNodeProps | keyof CoreTextNodeProps, + value, + ); }, configurable: true, enumerable: true, From 470198c0d7e9b5e0b7721ee93e72776efe49f4d2 Mon Sep 17 00:00:00 2001 From: jfboeve Date: Thu, 7 Nov 2024 11:21:51 +0100 Subject: [PATCH 2/2] refactored createProxy --- src/main-api/Inspector.ts | 40 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/src/main-api/Inspector.ts b/src/main-api/Inspector.ts index c78b877e..38e29be0 100644 --- a/src/main-api/Inspector.ts +++ b/src/main-api/Inspector.ts @@ -270,15 +270,6 @@ export class Inspector { node: CoreNode | CoreTextNode, div: HTMLElement, ): CoreNode | CoreTextNode { - const updateNodePropertyWrapper = ( - div: HTMLElement, - property: keyof CoreNodeProps | keyof CoreTextNodeProps, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value: any, - ) => { - this.updateNodeProperty(div, property, value); - }; - // Define traps for each property in knownProperties knownProperties.forEach((property) => { let originalProp = Object.getOwnPropertyDescriptor(node, property); @@ -293,24 +284,21 @@ export class Inspector { return; } - Object.defineProperties(node, { - [property]: { - get() { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return originalProp?.get?.call(node); - }, - set(value) { - originalProp?.set?.call(node, value); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - updateNodePropertyWrapper( - div, - property as keyof CoreNodeProps | keyof CoreTextNodeProps, - value, - ); - }, - configurable: true, - enumerable: true, + Object.defineProperty(node, property, { + get() { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return originalProp?.get?.call(node); + }, + set: (value) => { + originalProp?.set?.call(node, value); + this.updateNodeProperty( + div, + property as keyof CoreNodeProps | keyof CoreTextNodeProps, + value, + ); }, + configurable: true, + enumerable: true, }); });