fix(classes.collection): Fix closure bug in Collection decorator by defining collection getter on original constructor and prototype

This commit is contained in:
2025-11-28 11:02:39 +00:00
parent bf4b11f1f5
commit f6cc07880a
3 changed files with 21 additions and 1 deletions

View File

@@ -64,6 +64,20 @@ export function Collection(dbArg: SmartdataDb | TDelayed<SmartdataDb>) {
configurable: true
});
// Closure fix: When class methods reference the class name (e.g., `User.collection`),
// they get the original constructor via closure, not the decorated class.
// Define collection getter on the original constructor.
Object.defineProperty(constructor, 'collection', {
get: getCollection,
enumerable: false,
configurable: true
});
Object.defineProperty(constructor.prototype, 'collection', {
get: getCollection,
enumerable: false,
configurable: true
});
// Deno compatibility note: Property decorators set properties on the prototype.
// Since we removed instance property declarations from SmartDataDbDoc,
// the decorator-set prototype properties are now accessible without shadowing.