Add property conflict detection to JS ORM model hydration
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,27 @@ class Rsx_Js_Model {
|
|||||||
// This constructor filters out the __MODEL marker that was used to identify which class
|
// This constructor filters out the __MODEL marker that was used to identify which class
|
||||||
// to instantiate, keeping only the actual data properties on the instance.
|
// to instantiate, keeping only the actual data properties on the instance.
|
||||||
const { __MODEL, ...modelData } = data;
|
const { __MODEL, ...modelData } = data;
|
||||||
|
|
||||||
|
// Check for property conflicts before assignment
|
||||||
|
const modelName = __MODEL || this.constructor.name;
|
||||||
|
for (const key in modelData) {
|
||||||
|
if (key in this) {
|
||||||
|
if (typeof this[key] === 'function') {
|
||||||
|
throw new Error(
|
||||||
|
`Model property conflict: "${key}" from server response would overwrite ` +
|
||||||
|
`a method on ${modelName}. Check the PHP model's fetch() or toArray() method ` +
|
||||||
|
`to see if "${key}" should be excluded or renamed. If the JS method ${key}() ` +
|
||||||
|
`is computing a value the server now provides, remove the JS method.`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
`Model property conflict: "${key}" already exists on ${modelName} ` +
|
||||||
|
`and would be overwritten by server response data.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Object.assign(this, modelData);
|
Object.assign(this, modelData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user