DateProxy maps each Date setter to a logical DateProperty + getter pair.
private readonly _dateSetterMetadata: Map<DateSetterName, ISetterMetaData> =
new Map([
['setFullYear', { name: 'year', getterName: 'getFullYear', setterName: 'setFullYear' }],
['setUTCFullYear', { name: 'utcYear', getterName: 'getUTCFullYear', setterName: 'setUTCFullYear' }],
['setMonth', { name: 'month', getterName: 'getMonth', setterName: 'setMonth' }],
['setTime', { name: 'time', getterName: 'getTime', setterName: 'setTime' }],
]);
When timestamp changed, DateProxy emits either one generic change or filtered per-property changes.
return (...args: unknown[]) => {
const oldTimeStamp = target.getTime();
const setter = value as (...args: unknown[]) => unknown;
const result = setter.apply(target, args);
if (oldTimeStamp !== target.getTime()) {
this.emitChanges(oldTimeStamp, target, setterMetadata.name);
}
return result;
};