diff --git a/.changeset/fix-null-proto-hasownproperty.md b/.changeset/fix-null-proto-hasownproperty.md new file mode 100644 index 000000000..8ee745c4f --- /dev/null +++ b/.changeset/fix-null-proto-hasownproperty.md @@ -0,0 +1,5 @@ +--- +"solid-js": patch +--- + +Use Object.prototype.hasOwnProperty.call() to support null-prototype objects in store proxies diff --git a/packages/solid/store/src/mutable.ts b/packages/solid/store/src/mutable.ts index 9d2eb45d1..3427702d3 100644 --- a/packages/solid/store/src/mutable.ts +++ b/packages/solid/store/src/mutable.ts @@ -50,7 +50,7 @@ const proxyTraps: ProxyHandler = { if (!tracked) { const desc = Object.getOwnPropertyDescriptor(target, property); const isFunction = typeof value === "function"; - if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) + if (getListener() && (!isFunction || Object.prototype.hasOwnProperty.call(target, property)) && !(desc && desc.get)) value = getNode(nodes, property, value)(); else if (value != null && isFunction && value === Array.prototype[property as any]) { return (...args: unknown[]) => diff --git a/packages/solid/store/src/store.ts b/packages/solid/store/src/store.ts index 49030f886..135821eae 100644 --- a/packages/solid/store/src/store.ts +++ b/packages/solid/store/src/store.ts @@ -188,7 +188,7 @@ const proxyTraps: ProxyHandler = { const desc = Object.getOwnPropertyDescriptor(target, property); if ( getListener() && - (typeof value !== "function" || target.hasOwnProperty(property)) && + (typeof value !== "function" || Object.prototype.hasOwnProperty.call(target, property)) && !(desc && desc.get) ) value = getNode(nodes, property, value)();